您的位置:首页 > 编程语言 > Java开发

多客户端通信的Java套接字程序

2016-06-07 16:05 453 查看
这次设计了一个支持多客户端的通信小程序,实现服务端和客户端的实时通信,主要思想是利用Java套接字技术和线程池。服务端的程序如下:

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
* Created by Hui on 2016/6/7.
*/
public class ServerTest {

private int poolSize = 10;
private static ExecutorService threadPool = null;
public void init() {
System.out.println("Server init...");
threadPool = Executors.newFixedThreadPool(poolSize);
}
public static void main(String[] args) {
try {
new ServerTest().init();
ServerSocket server = new ServerSocket(8888);
while (true) {
Socket incoming = server.accept();
System.out.println("A Client Coming...");
threadPool.submit(new ReturnMessage(incoming));
}
} catch (IOException e) {
e.printStackTrace();
}
}

public static class ReturnMessage implements Runnable {
private Socket socket;
public ReturnMessage(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
try {
DataOutputStream output = new DataOutputStream(socket.getOutputStream());
DataInputStream input = new DataInputStream(socket.getInputStream());

String clientStr = input.readUTF();
System.out.println("Client Say: " + clientStr);

if (!"BYE".equals(clientStr)) {
output.writeUTF("Echo:" + clientStr);
}
output.writeUTF("Good Bye!!!");
output.close();
input.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
服务端实时的监听8888端口,一旦有链接即会建立与客户端的联系。
客户端连接的代码如下:

import java.io.*;
import java.net.Socket;

/**
* Created by zhaoyonghui on 16/6/7.
*/
public class SocketTest {
public static final String HOST = "你的服务器IP地址";
public static final int PORT = 8888;
public static void main(String[] args) {
Socket socket = null;
System.out.println("Client Start...");
try {
while (true) {
socket = new Socket(HOST, PORT);

DataInputStream inputStream = new DataInputStream(socket.getInputStream());
DataOutputStream outputStream = new DataOutputStream(socket.getOutputStream());

InputStreamReader reader = new InputStreamReader(System.in);
String str = new BufferedReader(reader).readLine();

outputStream.writeUTF(str);

String responseStr = inputStream.readUTF();
System.out.println(responseStr);
if ("Good Bye!!!".equals(responseStr)) {
break;
}
}

} catch (IOException e) {
e.printStackTrace();
} finally {
if (socket != null) {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: