多客户端通信的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();
}
}
}
}
}
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();
}
}
}
}
}
相关文章推荐
- java 反射
- Java编程性能优化一些事儿
- java获取获得Timestamp类型的当前系统时间
- Java中判断两个时间是否相隔一天
- java基础之异常处理
- java开发webservice的几种方式
- JAVA中消除list中重复项
- Java中Date类型与String类型互转
- 通过匿名内部类overrides
- 关于struts2中jsp页面访问自定义命…
- 用struts2+jsp+myeclipse的一个示…
- java EE错误,the type&…
- eclipse中the superclass&quo…
- eclipse添加插件画UML图
- Java Servlet完全教程
- Hessian知识学习总结(一)——基础知识
- Java线程之锁对象高效同步(ReentrantLock/ReentrantReadWriteLock)
- Struts2和SpringMVC处理过程
- Java两种延时——thread和timer
- Spring源码学习笔记(三)AOP实现