java socket server一问
最近在优化一个系统。情况如下
1、服务器端采用java开发,serversocket接收客户端的业务请求,业务受理完成后回包给客户端
2、客户端由delphi开发。有N个客户端
3、发送的业务报文大概会600字节
4、终端会有同时向服务器端发包的情况
5、服务器端采用多线程serversocket,但有同步锁
目前发现故障点如下
偶尔客户端发送的包服务器端会收不到(大概20000个业务包,会有80个丢包),但是客户端socket发送返回值,是正常发送的状态。就是意味着发送端应该没有问题。
刚开始以为是服务器端缓冲区过小的问题。服务器端改到100k的缓冲区但问题未得到解决。
目前怀疑
1、是否是因为服务器的同步锁引起丢包?
2、是否发送的报文过大引起?
serversocket代码片断如下:
public void run() {
try {
sSocket = new ServerSocket(port, 30);
sSocket.setReceiveBufferSize(100*1024);
while (!exit) {
try {
while (!exit) {
Socket socket = sSocket.accept();
socket.setReceiveBufferSize(100*1024);
synchronized (sList) {
if (sList.size() >= maxConnections) {
socket.close();
System.out.println("List out of bound");
} else {
socket.setSoTimeout(300 * 1000);
TradeProc pthread = new TradeProc(
socket, stList);
Thread thread = new Thread(pthread);
thread.start();
}
}
}
} catch (Exception e) {
sSocket.close();
}
sSocket = new ServerSocket(port, maxConnections);
synchronized (sList) {
sList.clear();
}
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
1、服务器端采用java开发,serversocket接收客户端的业务请求,业务受理完成后回包给客户端
2、客户端由delphi开发。有N个客户端
3、发送的业务报文大概会600字节
4、终端会有同时向服务器端发包的情况
5、服务器端采用多线程serversocket,但有同步锁
目前发现故障点如下
偶尔客户端发送的包服务器端会收不到(大概20000个业务包,会有80个丢包),但是客户端socket发送返回值,是正常发送的状态。就是意味着发送端应该没有问题。
刚开始以为是服务器端缓冲区过小的问题。服务器端改到100k的缓冲区但问题未得到解决。
目前怀疑
1、是否是因为服务器的同步锁引起丢包?
2、是否发送的报文过大引起?
serversocket代码片断如下:
public void run() {
try {
sSocket = new ServerSocket(port, 30);
sSocket.setReceiveBufferSize(100*1024);
while (!exit) {
try {
while (!exit) {
Socket socket = sSocket.accept();
socket.setReceiveBufferSize(100*1024);
synchronized (sList) {
if (sList.size() >= maxConnections) {
socket.close();
System.out.println("List out of bound");
} else {
socket.setSoTimeout(300 * 1000);
TradeProc pthread = new TradeProc(
socket, stList);
Thread thread = new Thread(pthread);
thread.start();
}
}
}
} catch (Exception e) {
sSocket.close();
}
sSocket = new ServerSocket(port, maxConnections);
synchronized (sList) {
sList.clear();
}
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
...全文
相关推荐
Java Socket实例(Server+Client)
Java Socket实例(Server+Client),分别运行这两个实例,就可以在Client端输入字符,查看在Server端实时接收的字符
java socket server 机器人
基于socket server java 机器人,最初是连接飞信 做自动应答机器人。学习socket server 可参考。
JSocket_Server.rar_jSocket server_java server socket_java socket
一个Socket Server例子,另外附带java socket参考手册
java_socket_simple_Server.rar_java socket _socket java
极好的java网络编程入门示例. 注释详尽规范,架构优秀。 不可多得!
基于Java的Socket多客户端Client-Server聊天程序的实现
主要介绍了基于Java的Socket多客户端Client-Server聊天程序的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧


