我正在使用 C 语言在 Linux 中使用命令通过套接字发送数据
send(ServerSocket, cSendBuff, strlen(cSendBuff), 0);
程序是:
- 创建套接字
- 连接到服务器
- while(条件):发送数据
当我在Linux环境下运行这个程序时,如果是连接的,就没有问题。但是为了在运行时处理失败的连接,我检查了一些情况并得到了如下结果:
情况1:
- 创建套接字:没有创建(注释掉创建函数)
- 连接到服务器:无连接(注释掉连接功能)
- 发送数据 -->失败(返回 -1)但没有崩溃
案例二:
- 创建套接字:成功
- 连接服务器:失败甚至无连接(注释掉连接功能)
- 发送数据 -->崩溃
然后,我尝试了 3 种不同的套接字值,但没有连接到服务器
案例3:
- ServerSocket = -1 --> 发送数据:失败
- ServerSocket = 0 --> 发送数据:失败
- ServerSocket = 4 --> 发送数据:崩溃
如果发送失败,这是正确的,但我不明白为什么在其他情况下我会崩溃。我尝试使用 Windows 但没问题,Linux 和 Windows 之间有什么不同吗?是否有意义?我只想打开套接字并连接到服务器一次,然后发送数据一千次,所以如果在这种情况下“崩溃”是有意义的,如果连接失败,我该如何解决这个问题?谢谢你的时间。
这是案例 2(通过停止服务器以测试连接失败的情况,连接失败):
ServerSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_IP) ;
...
iResult = connect(ServerSocket,(struct sockaddrx *)&server , sizeof(server));
iResult = send(ServerSocket, cSendBuff, strlen(cSendBuff), 0);
if(iResult<0)
{...}
这是案例3:
//ServerSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_IP) ;
...
//iResult = connect(ServerSocket,(struct sockaddrx *)&server , sizeof(server));
ServerSocket = 0;
iResult = send(ServerSocket, cSendBuff, strlen(cSendBuff), 0);
log();
ServerSocket = -1;
iResult = send(ServerSocket, cSendBuff, strlen(cSendBuff), 0);
log();
ServerSocket = 4;
iResult = send(ServerSocket, cSendBuff, strlen(cSendBuff), 0);
log();
if(iResult<0)
{...}