java socket server一问

wyplay wyplay 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
最近在优化一个系统。情况如下
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());
}
}
...全文

相关推荐

评论 3
收藏 已收藏
分享
返回顶部
wyplay
Java 51,407 成员 86,126 内容