Socket 简例

单线程,在同时连接两个以上客户端时,只能按顺序接受客户端 socket

如两个客户端连接后,后面的先发送信息,则会阻塞

服务器端:

public class Server {

	ServerSocket serverSocket;
	Socket socket;

	public Server() throws IOException {
		serverSocket = new ServerSocket(10086);
		// 调用 accept 时才开始监听,等待客户端 socket 连接并将得到的信息包装成 socket 对象返回,否则一直阻塞
		while (true) {
			socket = serverSocket.accept();
			// 接受客户端信息
			BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			System.out.println("Client : " + br.readLine());
			// 反馈
			PrintWriter pw = new PrintWriter(socket.getOutputStream());
			pw.write("Received.");
			pw.flush();
			// 关闭
			br.close();
			pw.close();
		}
	}

	public static void main(String[] args) {
		try {
			new Server();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

客户端:

public class Client {

	Socket socket;

	public Client() throws UnknownHostException, IOException {
		// 使用 socket 对服务器发起连接
		socket = new Socket("localhost", 10086);
		// 请求内容
		PrintWriter pw = new PrintWriter(socket.getOutputStream());
		System.out.print("Say:");
		BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
		pw.write(input.readLine());
		pw.flush();
		// 只关闭流,pw.close 等会直接关闭 socket
		socket.shutdownOutput(); // 不调用此方法,客户端一直处于等待(等待输出流完成)
		// 服务器响应
		BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
		System.out.println("Server : " + br.readLine());
		// 关闭
		pw.close();
		input.close();
		br.close();
	}

	public static void main(String[] args) {
		try {
			new Client();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}
终端命令行运行 eclipse 项目的 java 文件

移除 package

javac Server.java 编译成 class 文件

java Server 运行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值