代码“编译“和代码“解释“的最根本区别?

生成“目标代码”就是 “编译”
不生成目标代码的就是“解释”
在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这段代码确实存在一些问题,可能是因为它使用的是过时的 Winsock 1.1 版本,而不是 Winsock2。这可能导致一些编译错误或运行时错误。 另外,这段代码的 main() 函数返回类型应该是 int,而不是 void。因此,您可以尝试对代码进行一些修改,以使其能够编译和运行。以下是可能的修改: 1. 修改 main() 函数的返回类型为 int,如下所示: ```c int main() { ``` 2. 用 WSACleanup() 函数关闭 Winsock 库。在程序结束时添加以下代码: ```c WSACleanup(); ``` 3. 在调用 bind() 函数之前,添加以下代码以设置套接字选项,以避免“地址已在使用中”的错误: ```c int optval = 1; setsockopt(sockSrv, SOL_SOCKET, SO_REUSEADDR, (const char*)&optval, sizeof(optval)); ``` 4. 向 send() 函数添加 MSG_NOSIGNAL 标志,以避免 SIGPIPE 信号的问题: ```c send(sockConn, sendBuf, strlen(sendBuf) + 1, MSG_NOSIGNAL); ``` 5. 将 main() 函数中的 "return;" 修改为 "return 0;",以指示程序正常退出。 综上所述,以下是可能的修改后的代码: ```c #include <stdio.h> #include <Winsock2.h> int main() { WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD(2, 2); err = WSAStartup(wVersionRequested, &wsaData); if (err != 0) { return 1; } if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2) { WSACleanup(); return 1; } SOCKET sockSrv = socket(AF_INET, SOCK_STREAM, 0); int optval = 1; setsockopt(sockSrv, SOL_SOCKET, SO_REUSEADDR, (const char*)&optval, sizeof(optval)); SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY); addrSrv.sin_family = AF_INET; addrSrv.sin_port = htons(6000); bind(sockSrv, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR)); listen(sockSrv, 5); SOCKADDR_IN addrClient; int len = sizeof(SOCKADDR); while (1) { SOCKET sockConn = accept(sockSrv, (SOCKADDR*)&addrClient, &len); char sendBuf[50]; sprintf(sendBuf, "Welcome %s to here!", inet_ntoa(addrClient.sin_addr)); send(sockConn, sendBuf, strlen(sendBuf) + 1, MSG_NOSIGNAL); char recvBuf[50]; recv(sockConn, recvBuf, 50, 0); printf("%s\n", recvBuf); closesocket(sockConn); } WSACleanup(); return 0; } ``` 请注意,这只是一种可能的解决方案,您可能需要根据您的实际情况进行修改。同时,建议您仔细阅读 Winsock2 文档,以了解如何正确使用 Winsock2 库。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值