Java Socket 模拟客户端与服务器端通讯

1、代码


1.1、服务端(SocketServer.java)

package com.demo.socket.no1;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class SocketServer {

	// 服务器套接字
	private ServerSocket serverSocket;
	// 客户端套接字
	private Socket socket;
	private BufferedReader reader ;
	private PrintWriter writer;
	
	public SocketServer (){
		
		BufferedReader response = null;
		
		try {
			
			// 创建绑定8000端口的服务器套接字
			serverSocket = new ServerSocket(8000);
			
			System.out.println("服务器正在监听中。。。");
			
			while(true){
				
				// 监听连接
				socket = serverSocket.accept();
				
				// 获取客户端请求信息
				reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
				String requestMsg = reader.readLine();
				
				if("quit".equalsIgnoreCase(requestMsg) || "exit".equalsIgnoreCase(requestMsg)){
					
					if(socket!=null){
						socket.close();
					}
					continue;
				}
				
				System.err.println(requestMsg);
				
				// 服务器向客户端返回信息
				writer = new PrintWriter(socket.getOutputStream(), true);
				response = new BufferedReader(new InputStreamReader(System.in));
				String responseMsg = response.readLine();
				writer.println(responseMsg);
			}
			
		} catch (IOException e) {
			e.printStackTrace();
		} finally {

			try {
				
				if(response!=null){
					response.close();
				}
				if(writer!=null){
					writer.close();
				}
				if(reader!=null){
					reader.close();
				}
				if(socket!=null){
					socket.close();
				}
				if(serverSocket!=null){
					serverSocket.close();
				}
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
	}
	
	public static void main(String[] args) {
		
		new SocketServer();
	}
	
}

1.2、客户端(SocketClient.java)

package com.demo.socket.no1;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class SocketClient {

	// 客户端套接字
	private Socket socket ;
	BufferedReader reader;
	PrintWriter writer;
	
	public SocketClient () {
		
		BufferedReader line = null;
		
		try {
			
			while(true){
				
				// 客户端建立与服务器的链接
				socket = new Socket("127.0.0.1", 8000);
				
				line = new BufferedReader(new InputStreamReader(System.in));
				String request = line.readLine();
				
				// 向服务器发送消息
				writer = new PrintWriter(socket.getOutputStream(), true);
				writer.println(request);
				
				// 输入quit或exit则客户端断开与服务器的链接
				if("quit".equalsIgnoreCase(request) || "exit".equalsIgnoreCase(request)){
					
					if(socket!=null){
						socket.close();
					}
					break;
				}
				
				reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
				String response = reader.readLine();
				System.err.println(response);
			}
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			
			try {
				
				if(line!=null){
					line.close();
				}
				if(writer!=null){
					writer.close();
				}
				if(reader!=null){
					reader.close();
				}
				if(socket!=null){
					socket.close();
				}
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
	}
	
	public static void main(String[] args) {
		
		new SocketClient();
	}
}

2、执行结果


2.1、客户端

Hi, Server
Hi, Client
What are you doing?
Nothing.
exit

2.2、服务器端

服务器正在监听中。。。
Hi, Server
Hi, Client
What are you doing?
Nothing.


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值