三要素:IP地址,端口,协议
IP地址
端口
协议
UDP通信
UDP发送数据
UDP接收数据
UDP通信 例题
发送端
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.*;
/* 一端发送数据:直到键盘录入886,发送数据结束,不然就会一直发送
一端接收数据:采用死循环结束,不清楚什么时候会发送数据结束*/
public class UDPSend_Test {
public static void main(String[] args) throws IOException {
//创建发送端的Socket对象
DatagramSocket d=new DatagramSocket();
//创建数据,并打包
InputStreamReader ir=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(ir);
String line; //读取的字符数据
while((line= br.readLine())!=null){
if("886".equals(line)){
break; //输入886,跳出循环,结束发送
}
byte[] by=line.getBytes(); //把数据给字节数组
DatagramPacket dp=new DatagramPacket(by,by.length,InetAddress.getByName("172.18.20.117"),12345);
//调用方法发送数据
d.send(dp);
}
//关闭发送端
d.close();
}
}
接收端
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/* 一端发送数据:直到键盘录入886,发送数据结束,不然就会一直发送
一端接收数据:采用死循环结束,不清楚什么时候会发送数据结束*/
public class UDPReceive_Test {
public static void main(String[] args) throws IOException {
//创建接收端的对象
DatagramSocket ds=new DatagramSocket(12345); //接收端要写端口号,不然接收不到数据
while(true){
//创建接收数据的数据包
byte[] by=new byte[1024];
DatagramPacket dp=new DatagramPacket(by,by.length);
//接收数据
ds.receive(dp);
//解析数据,并显示
String s=new String(dp.getData(),0,dp.getLength());
System.out.println("数据是:"+s);
}
//关闭接收端ds.close();
}
}
TCP通信
发送数据
接收数据
例题1(客户端发送数据,接收服务器的反馈;服务器接收数据,给出反馈)
例题2(客户端发送数据,键盘录入,直到输入886 结束运行;服务器接收数据,并输出)
TCP的本质应该是客户端和服务端双方建立了一个socket的连接,所以如果有一方的socket关闭了,相当于连接中断了,所以另一方也就会停止了。
例题3(服务器数据写入文件,客户端与例题2一样)
例题4(客户端的数据来自文本文件,服务端的数据写入文本文件,与例题3 的服务器一样)
例题5(与例题4相比,客户端多了接收服务器反馈,服务器多了)
例题6 多线程(客户端与例题5一样,服务器将数据写入文本文件,反馈数据,为每一个客户端开启一个封装的线程;服务器是一直开着的)