package com.wz.library;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
/**
*/
public class SocketServerHelper {
private static final String CHARSET = "UTF-8";
private static final int PORT = 12345;
private ServerSocket mServerSocket;
private ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
public SocketServerHelper() {
init();
}
private void init() {
// 创建一个服务器端socket,指定绑定的端口号,并监听此端口
try {
mServerSocket = new ServerSocket(PORT);
System.out.println("**********服务器即将启动,等待客户端的连接*************");
while (true) {
Socket socket = mServerSocket.accept();
// 调用accept()方法开始监听,等待客户端的连接
scheduledThreadPool.execute(new SocketThread(socket));
}
} catch (IOException e) {
e.printStackTrace();
}
}
public void close() {
if (mServerSocket != null) {
try {
mServerSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
private class SocketThread extends Thread {
private Socket mSocket;
private long lastHeartTime = System.currentTimeMillis();
SocketThread(Socket socket) {
mSocket = socket;
}
@Override
public void run() {
super.run();
try {
InputStream is = mSocket.getInputStream();
OutputStream os = mSocket.getOutputStream();
System.out.println("客户端--" + mSocket.getInetAddress().getHostName() + "--进入");
while (!mSocket.isClosed()) {
if (System.currentTimeMillis() - lastHeartTime > 30 * 1000) {
is.close();
os.close();
mSocket.close();
break;
}
byte[] bytes;
int l = 0;
while ((l = is.available()) > 0) {
lastHeartTime = System.currentTimeMillis();
bytes = new byte[l];
is.read(bytes);
String data = new String(bytes, CHARSET);
System.out.println("客户端IP:" + mSocket.getInetAddress().getHostName());
System.out.println("客户端:" + data);
os.write(data.getBytes(CHARSET));
os.flush();
if (data.equals("end")) {
is.close();
os.close();
mSocket.close();
break;
}
}
}
System.out.println("客户端--" + mSocket.getInetAddress().getHostName() + "--断开");
} catch (EOFException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
基于Java的Socket服务器,简单实现
共15个文件
class:4个
xml:4个
prefs:2个
需积分: 46 36 下载量 139 浏览量
2017-11-14
10:07:40
上传
评论
收藏 11KB 7Z 举报
温馨提示
使用Java实现的ServerSocket服务器,可以通过IP端口号直连,连接后对每个客户端有超时判断,超时后主动断开客户端链接。
资源推荐
资源详情
资源评论
收起资源包目录
SocketServerDemo.7z (15个子文件)
SocketServerDemo
.project 392B
bin
SortDemo.class 2KB
com
wz
library
SocketServerHelper.class 2KB
SocketServerHelper$SocketThread.class 3KB
Server.class 534B
.settings
org.eclipse.core.resources.prefs 57B
org.eclipse.jdt.core.prefs 598B
src
Server.java 457B
com
wz
library
SocketServerHelper.java 4KB
.idea
workspace.xml 49KB
encodings.xml 188B
misc.xml 2KB
modules.xml 272B
.classpath 301B
SocketServerDemo.iml 460B
共 15 条
- 1
资源评论
HenryLi_
- 粉丝: 1
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功