博主本人用的是maven管理的spring-mvc。
核心代码如下:
OioServer.java,socket服务端实体类
package com.socket.OIO;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
/**
* Created by wtz on 2017/9/15.
*/
@Component
public class OioServer {
/**
* 读取数据
*
* @param socket
*/
public void handler(Socket socket) {
try {
byte[] bytes = new byte[1024];
InputStream inputStream = socket.getInputStream();
while (true) {
//读取数据(阻塞)
int read = inputStream.read(bytes);
if (read != -1) {
System.out.println(new String(bytes, 0, read));
} else {
break;
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
System.out.println("socket关闭");
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
OioServerTest.java,socket服务端测试类
package com.socket.OIO;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* Created by wtz on 2017/9/15.
*/
// 加载spring配置文件
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"classpath:spring-mybatis.xml","classpath:spring-mvc.xml"})
public class OioServerTest {
@Autowired
private OioServer oioServer;
@Test
public void testOioStartServer() throws Exception {
//创建线程池
ExecutorService newCachedThreadPool = Executors.newCachedThreadPool();
//创建socket服务,监听10101端口
ServerSocket serverSocket = new ServerSocket(10101);
System.out.println("服务器启动!");
while(true){
//获取一个套接字(阻塞)
final Socket socket = serverSocket.accept();
System.out.println("来了一个新的客户端!");
newCachedThreadPool.execute(new Runnable() {
@Override
public void run() {
//业务处理
oioServer.handler(socket);
}
});
}
}
}
Demo项目结构如图:
启动服务端:
使用终端敲命令行连接服务端:
终端命令为:
telnet 127.0.0.1 10101
客户端发消息给服务端,服务端收到消息
终端输入Ctrl+]可以进入telnet的命令模式,之后输入quit,之后回车就可以关闭telnet连接。