在现有的网络中,网络通讯的方式主要有两种:
1、 TCP(传输控制协议)方式
2、 UDP(用户数据报协议)方式
而java在对于这两种网络编程中提供了封装类:
TCP:ServerSocket和Socket
UDP:DatagramSocket和DatagramPacket
TCP和UDP的区别:
TCP:
在等待连接的时候是阻塞的,等带客服端连接上之后,才向下面执行,一般都是多线程执行的,在服务器连接多过的时候,处理的速度就会非常慢,建议设置线程的优先级!
UDP:
//服务器端
1.创建DatagramSocket,指定端口号
2.创建DatagramPacket
3.接收客服端发送的数据信息
4.读取数据
//客户端
1.定义发送的信息
2.创建DatagramPacket 包含要发送的数据
3.创建DatagramSocket
4.发送数据包
UDPClient:
//创建DatagramSocket
DatagramSocket datagramSocket=new DatagramSocket();
//定义发送的信息
InetAddress address=InetAddress.getByName("a");
int port=8888;
byte[] data="你好客服端".getBytes();
//创建DatagramPacket 包含要发送的数据
DatagramPacket datagramPacket=new DatagramPacket(data,data.length,address,port);
//发送数据包
datagramSocket.send(datagramPacket);
UDPServer:
//创建DatagramSocket,指定端口号
DatagramSocket socket=new DatagramSocket(8888);//指定端口号
byte[] data=new byte[1024];
//创建DatagramPacket
DatagramPacket datagramPacket=new DatagramPacket(data,data.length);
//接收数据
socket.receive(datagramPacket);//会一直阻塞,知道接收到数据报
System.out.println(new String(data,0,datagramPacket.getLength()));
TCPServcer:
ServerSocket serverSocket=new ServerSocket(8888);
System.out.println("服务器已经启动");
while(true){
Socket scoket= serverSocket.accept();
new ServerThread(scoket).start();
}
ServerThread:
private Socket socket;
public ServerThread(Socket socket){
this.socket=socket;
}
@Override
public void run() {
try {
InputStream inputStream=socket.getInputStream();
InputStreamReader inputStreamReader=new InputStreamReader(inputStream);
BufferedReader bufferedReader=new BufferedReader(inputStreamReader);
String str=null;
while((str=bufferedReader.readLine())!=null){
System.out.println("客服端说:"+str);
}
} catch (IOException e) {
e.printStackTrace();
}
}
TCPClient:
Socket socket=new Socket("a",8888);
PrintWriter printWriter=new PrintWriter(socket.getOutputStream());
printWriter.write("服务器你好!+1");
printWriter.flush();
printWriter.close();
socket.close();
个人建议,个人理解