【JAVA】基于Socket协议传输的服务端与客户端TCP和UDP协议实例!(可直接运行)

说明 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();
		}
	
		
	}

}

猜你喜欢

转载自blog.csdn.net/dxnn520/article/details/107184140