这是我的代码示例。我创建了两个套接字,打开了两个端口并试图接受连接。我的所有文件描述符都设置为public int getPairs(final String hand) {
int count = 0;
List<String> cards = getParts(hand, 2);
for (int i = 0; i < cards.size() - 1; i++) {
for (int j = i + 1; j < cards.size(); j++) {
if (cards.get(i).charAt(1) == cards.get(j).charAt(1)) {
count++;
}
}
}
return count;
}
private static List<String> getParts(final String string,
final int partitionSize) {
List<String> parts = new ArrayList<>();
int len = string.length();
for (int i = 0; i < len; i += partitionSize) {
parts.add(string.substring(i, Math.min(len, i + partitionSize)));
}
return parts;
}
。
文件描述符NONBLOCK
用于接受端口8080中的HTTP GET请求。
文件描述符fd_client_serv
用于从端口9090中的客户端接受我服务器上的命令。
当我发送HTTP请求时,我想读取请求并只打印第一行。但有时它是有效的,有时它不会。在服务器运行时,我使用curl发送请求。有时服务器会继续打印消息,有时则不然。我猜双重fd_client_comm
存在问题。
accepting
答案 0 :(得分:1)
除非侦听套接字设置为非阻塞,否则accept()
函数会阻止,直到接受连接。即使你的侦听套接字是非阻塞的,你也会遇到一个性能紊乱的繁忙循环。因此,虽然每次循环迭代有两个accept()
次调用不是本身错误,但您不太可能使它们能够很好地协同工作。
相反,请考虑其中一种选择:
select()
,poll()
或类似的方式对多个端口和/或多个并发客户端进行多路复用I / O处理。