说明 | TCP协议 | UDP协议 |
是否建立连接 | 建立连接 | 非连接 |
传输稳定性 | 稳定(不丢包) | 不稳定(容易丢包) |
速度 | 慢 | 快 |
一、TCP协议实例
1、Socket_Server.java
package socket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
public class Socket_Server {
public static void main(String[] args) {
try{
// 创建一个服务器端对象m_ServerSocket,参数是端口号
ServerSocket m_ServerSocket=new ServerSocket(5000);
// 通过accept()接收客户的通信
Socket m_socket=m_ServerSocket.accept();
// 获取客户端输入流,获得用户请求的信息
InputStream is=m_socket.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
String info;
while((info=br.readLine())!=null){
System.out.println("客户端说:"+info);
}
// 给客户端传一个响应字符
String reply="来自【服务器】的信息:作者是【老舍】。";
byte[] replys=reply.getBytes();
// 通过输出流发送请求
OutputStream os=m_socket.getOutputStream();
os.write(replys);
// 关闭打开的资源
os.close();
br.close();
is.close();
m_socket.close();
m_ServerSocket.close();
}
catch (UnknownHostException e)
{
e.printStackTrace();
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
2、Socket_Client.java
package socket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class Socket_Client {
public static void main(String[] args) {
try{
// 创建一个客户端对象m_socket,参数是地址和端口号
Socket m_socket=new Socket("localhost",5000);
// 通过输出流发送请求
OutputStream os=m_socket.getOutputStream();
// 把信息存入到字节变量中,再发送。
String info="服务器,帮我查一下《骆驼祥子》的作者是谁?";
byte[] infos=info.getBytes();
os.write(infos);
// 先关闭socket连接
m_socket.shutdownOutput();
InputStream is=m_socket.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
String reply;
while((reply=br.readLine())!=null){
System.out.println("服务器的响应:"+reply);
}
// 关闭打开的资源
br.close();
is.close();
os.close();
m_socket.close();
}
catch (UnknownHostException e)
{
e.printStackTrace();
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
二、UDP协议实例
1.J_Client.java(客户端代码)
package J_UDP;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
public class J_Client {
public static void main(String[] args) {
String info="来自客户端:西游记的作者是谁?";
byte[] infos=info.getBytes();
DatagramSocket socket=null;
try{
InetAddress ia=InetAddress.getByName("localhost");
// 客户端要发送的数据包对象
DatagramPacket dp =new DatagramPacket(infos,infos.length,ia,5000);
// 客户端需要一个DatagramSocket对象
socket=new DatagramSocket();
// 通过DatagramSocket对象发送数据包到服务器
socket.send(dp);
// 接收服务器的响应
byte[] replys=new byte[1024];
DatagramPacket dp1=new DatagramPacket(replys,replys.length);
socket.receive(dp1);
String reply=new String(dp1.getData(),0,dp1.getLength());
System.out.println(reply);
}
catch(UnknownHostException e){
e.printStackTrace();
}
catch(SocketException e){
e.printStackTrace();
}catch(IOException e)
{
e.printStackTrace();
}
}
}
2.j_Server.java(服务器)
package J_UDP;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketAddress;
import java.net.SocketException;
public class j_Server {
public static void main(String[] args) {
byte[] infos=new byte[1024];
DatagramPacket dp=new DatagramPacket(infos,infos.length);
try{
DatagramSocket socket=new DatagramSocket(5000);
socket.receive(dp);
// 建一个字符串,打成包
String info = new String(dp.getData(),0,dp.getData().length);
System.out.println(info);
// 给客户端一个回复
String reply="来自服务器:作者是【吴承恩】";
// 客户端的地址
SocketAddress sa=dp.getSocketAddress();
// 把字符串打一个数据包
DatagramPacket dp1=new DatagramPacket(reply.getBytes(),0,reply.getBytes().length,sa);
// 发送数据包给客户端
socket.send(dp1);
}
catch(SocketException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
}
}