java从入门到弃坑十八天
来源:互联网 发布:霍华德职业生涯数据 编辑:程序博客网 时间:2024/06/05 19:59
1.网络编程三要素:A:ip:一个计算机的标识。
B:端口:每个应用程序对应一个端口用来通信,有效端口:0-65535,其中0-1024
系统使用或保留端口。
C:协议:TCP和UDP协议。
2.IP:特殊IP:127.0.0.1:本地回环地址,用来做本地测试。
Ping IP地址:该指令用来检测本机是否可以和指定的IP地址的计算机进行正常通信。
ipconfig:该指令用来查看本机的ip地址
xxx.xxx.xxx.255:广播地址,该地址发出的信息在该局域网内的所有ip都可查看。
3.端口号:物理端口:物理设备对应的端口,网卡口。
逻辑端口:用来标识我们的计算机上的进程,端口号有效范围是0-65535,0-1024为系统占用
4.协议:UDP:把数据打包成数据包,不需要建立连接。数据包大小有限制,不能超过64k。因为无连接,因此属于
不可靠协议(可能丢失数据),但是效率高。
TCP:需要建立连接形成连接通道,数据用该通道进行传输,没有大小限制,因为有连接,属于可靠协议,
但是传输效率低。
5.InetAddress:为了方便我们对IP地址的获取和操作而产生的类。可以用此类表示IP地址。
public static InetAddress getByName(String host)( host: 可以是主机名,也可以是IP地址的字符串表
现形式)
public String getHostAddress()返回 IP 地址字符串(以文本表现形式)。
public String getHostName()获取此 IP 地址的主机名。
6.网络编程,也叫socket编程,套接字编程。网络上具有唯一标识的IP和端口组合构成唯一能识别的标识符套接字。
socket原理机制:通信两端都有socket,数据在两个socket之间通过io流传输。
7.UDP协议进行网络编程:
A:UDP发送端步骤:1.创建UDP发送数据端socket对象。
2.创建数据包并将数据封装在包内。
3.通过socket对象发送数据包。
4.释放资源。
import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;public class UDPClient {public static void main(String[] args) throws Exception {InetAddress add=InetAddress.getByName("Lenovo-PC");DatagramSocket ds=new DatagramSocket();byte[] buf="java".getBytes();DatagramPacket dp=new DatagramPacket(buf, buf.length, add, 9999);ds.send(dp);ds.close();}}
B:UDP接收端步骤:1.创建UDP接收数据端socket对象。
2.创建接收数据的数据包并接收数据。
3.从数据包中解析出数据。
4.释放资源。
import java.net.DatagramPacket;import java.net.DatagramSocket;public class UDPServer {public static void main(String[] args) throws Exception {DatagramSocket ds=new DatagramSocket(9999);byte[] buf=new byte[1024];DatagramPacket dp=new DatagramPacket(buf, buf.length);ds.receive(dp);System.out.println(new String(buf, 0, dp.getLength()));ds.close();}}
多线程实现聊天室(相当于是将发送数据端和接收数据端合并)
输入线程:
import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.util.Scanner;public class ClientThread implements Runnable{DatagramSocket ds;public ClientThread(DatagramSocket ds) {super();this.ds = ds;}public void run() {try {InetAddress add=InetAddress.getByName("Lenovo-PC");Scanner sc=new Scanner(System.in);String s;while(true){s=sc.nextLine();if(s.equals("exit")){break;}byte[] chs=s.getBytes();DatagramPacket dp=new DatagramPacket(chs,chs.length, add, 10086);ds.send(dp);}ds.close();} catch (Exception e) {// TODO: handle exception}}}
输出线程:
import java.net.DatagramPacket;import java.net.DatagramSocket;public class ServerThread implements Runnable{DatagramSocket ds;public ServerThread(DatagramSocket ds) {//构造传参super();this.ds = ds;}public void run() {try {while(true){byte [] buf=new byte[1024];DatagramPacket dp=new DatagramPacket(buf, buf.length);ds.receive(dp);System.out.println(new String(buf, 0, dp.getLength()));}} catch (Exception e) {// TODO: handle exception}}}
主程序:
import java.net.DatagramSocket;public class MainThread {public static void main(String[] args) throws Exception {DatagramSocket ds=new DatagramSocket();new Thread(new ClientThread(ds)).start();new Thread(new ServerThread(new DatagramSocket(10086))).start();}}
8.TCP协议进行网络编程:
发送数据步骤:A:创建TCP协议发送端Socket对象,指定服务器IP及端口。
B:获取输出流,并写数据。
C:释放资源。(由于TCP是一种可靠的协议,所以只能先运行接收端,在运行发送端)
接收数据步骤:A:创建TCP接收端socket对象,指定端口。
B:监听客户端链接。
C:获取输出流并读取数据。
D:释放资源。
exp:客户端键盘录入数据,服务端将数据写入文件
键盘录入文件并输入到服务端:
import java.io.BufferedWriter;import java.io.OutputStreamWriter;import java.net.InetAddress;import java.net.Socket;import java.util.Scanner;public class TCPClient {public static void main(String[] args) throws Exception {InetAddress add=InetAddress.getByName("Lenovo-PC");Socket sk=new Socket(add, 9527);Scanner sc=new Scanner(System.in);String s;BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(sk.getOutputStream()));while((s=sc.nextLine())!=null){bw.write(s);bw.newLine();bw.flush();}bw.close();sk.close();}}
读取io流中数据并写入文件:
import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileWriter;import java.io.InputStreamReader;import java.net.ServerSocket;import java.net.Socket;public class TCPServer {public static void main(String[] args) throws Exception {ServerSocket ss=new ServerSocket(9527);Socket sk=ss.accept();BufferedReader br=new BufferedReader(new InputStreamReader(sk.getInputStream()));BufferedWriter bw=new BufferedWriter(new FileWriter("sun.txt"));String s;while((s=br.readLine())!=null){System.out.println(s);bw.write(s);bw.newLine();bw.flush();}bw.close();sk.close();}}
- java从入门到弃坑十八天
- java从入门到弃坑第八天
- java从入门到弃坑十五天
- java入门第八天 数组的复制扩容(截取)
- Java进阶学习第八天——WEB入门
- php入门第八天
- web入门第七八天
- Java第八天
- Java学习第八天
- JAVA 学习第八天
- Java 基础 第八天
- java基础第八天
- JAVA学习第八天
- Java学习第十八天
- java第八天
- java学习第八天
- Java第八天
- Java总结第八天
- node koa2图片上传的实现
- SwipeToLoadLayout下拉刷新上拉加载
- iOS 图片的压缩
- 欢迎使用CSDN-markdown编辑器
- ngx_lua 模块
- java从入门到弃坑十八天
- protobuf入门
- C#中异常捕捉try catch效率问题
- 根据地址获取经纬度
- 静(动)态顺序表的实现
- CSS3 Media Queries 匹配不同屏幕
- ListView嵌套EditText,ListView随软键盘一起上移
- 使用myeclipse构建maven管理的springmvc项目
- 手动创建Servlet配置web.xml的过程