多线程 udp通讯和 tcp通讯
网络通讯协议(规则):对数据的传输格式 速率 步骤等做了规定 常用的是TCP\IP协议 UDP协议
IP地址 是电脑的地址 端口号指的是 电脑程序的端口号
InetAddress类
获取主机的inet对象
InetAddress inet=InetAddress.getByName("192.168.1.171");
获取本地主机对象
InetAddress inet2=InetAddress.getLocalHost();
获取主机名
inet.getHostName()
返回IP地址
inet.getHostAddress()
UDP协议
发送端不会在意接收端是否收到,接收端也不会在意发送端是否发送。
TCP协议
分客户端和服务器端 第一次握手是客户端向服务器端发出连接请求(请求连接) 你二次握手是服务器端向客户端回复一个响应(确认连接) 第三次握手 客户端在向服务端发送确认发送消息请求(正在连接)
UDP简单聊天
创建接收端
//创建DatagramSocket对象
DatagramSocket ds=new DatagramSocket(6666);
//创建接受数组
byte[] b=new byte[1024];
//创建数据包对象
while(true){
DatagramPacket dp=new DatagramPacket(b, b.length);
//接受数据
ds.receive(dp);
//拆包
//获取发送端ip地址
String ip=dp.getAddress().getHostAddress();
//获取端口号
int port=dp.getPort();
//获取数据长度
int length=dp.getLength();
System.out.println("ip地址为:"+ip+",端口号为:"+port+",发送内容为:"+new String (b,0,length));
}
//释放资源
//ds.close();
创建发送端
Scanner sc=new Scanner(System.in);
//创建数据包,封装要发送的数据以及明确接收端的IP和端口号
//明确接收端的ip地址
InetAddress ip=InetAddress.getByName("127.0.0.1");
//创建DatagramSocket对象 用于数据包发送
DatagramSocket ds=new DatagramSocket();
while(true){
byte[] b=sc.next().getBytes();
DatagramPacket dp=new DatagramPacket(b,b.length,ip,6666);
//发送
ds.send(dp);
}
//释放资源
//ds.close();
tcp通讯
分客户端和服务器端 第一次握手是客户端向服务器端发出连接请求(请求连接) 你二次握手是服务器端向客户端回复一个响应(确认连接) 第三次握手 客户端在向服务端发送确认发送消息请求(正在连接)
客户端:
创建客户端对象:Socket socket=new Socket("127.0.0.1",6666);
通过Socket对象创建输出流对象:OutputStream out=socket.getOutputStream();
写要传输的内容:out.write("你好".getbytes())
接收服务器返回的数据:创建数据接收流对象:InputStream in=socket.getInputStream()
创建接收数据用的byte数组:byte[] bytes=new char[1024];7.创建ch的长度:int len=in.read(bytes);
接收数据并打印system.out.println(内容是:+new String(bytes,0,len));
释放资源:socket.close();
服务器端:
创建服务器对象:ServerSocket server=new ServerSocket(6666);
创建客户端接收对象:Socket socket=server.accrpt();
创建字节输入流:InputStream in=socket.getInputStream();
创建接收的byte数组:byte[] bytes=new byte[1024];
创建接收数据的byte数组长度:int len=in.read(bytes); 得到客户端ip:String ip=socket.getInetAddress().getHostAddress()
打印接收数据:system.out.println(ip地址:+ip+内容+new String(bytes,0,len));
回复客户端:1.创建字节输出流:OutputStream out=socket.getOutputStream();
写返回数据:out.writer("你好".getbytes); 3.释放资源:server.close();