C 在接受()之后发送数据

C 在接受()之后发送数据,c,sockets,C,Sockets,我已经用c写了一个接受连接的小型服务器。它只接受一个连接,并且应该在连接被接受时发送数据。但是它没有 它接受连接,但从不发送任何数据(accept()调用后的行从不执行) //服务器! #包括 #包括 #包括 #包括 #pragma注释(lib,“WS2_32.lib”) 使用namespace::std; int main(int argc,字符**argv){ int sockd,newsockd,状态=0; WSADATA ws; WSAStartup(MAKEWORD(2,2)和ws);

我已经用c写了一个接受连接的小型服务器。它只接受一个连接,并且应该在连接被接受时发送数据。但是它没有
它接受连接,但从不发送任何数据(accept()调用后的行从不执行)

//服务器!
#包括
#包括
#包括
#包括
#pragma注释(lib,“WS2_32.lib”)
使用namespace::std;
int main(int argc,字符**argv){
int sockd,newsockd,状态=0;
WSADATA ws;
WSAStartup(MAKEWORD(2,2)和ws);
结构addrinfo提示,*res;
零内存(&提示,sizeof(提示));
hits.ai_family=AF_INET;
hits.ai_socktype=SOCK_流;
hits.ai_protocol=IPPROTO_TCP;

您不能将
newsockd
分配给
accept
的结果

accept
返回与客户端套接字相关的新文件描述符

将代码更改为:

newsockd = accept(sockd, (struct sockaddr*)&theirs,(socklen_t*) sizeof(theirs));
“(socklen_t*)sizeof(他们的)”-不,演员阵容不好。sizeof(他们的)和20 ish一样,在大多数系统上取消对地址20 ish的引用是非法的

尝试:


注意:在调用后,您可能需要sLen,例如,在返回的对等地址末尾插入一个null(不确定是否通过接受调用输入)。

抱歉,忘记粘贴正确的代码。程序编译良好。“将代码更改为:“否,因为此”
(socklen_t*)sizeof(theres))
”是一个杀手。很长一段时间以来可读性最强的代码…@ckruczek所以问题是…?你最好在你的问题中阅读如何更好地格式化你的代码,这样你就可以通过提问获得repu。虽然阅读你的问题和获得代码的要点要容易得多。@ckruczek我现在可以得到一些帮助吗?。顺便说一句,我需要帮助而不是“WSAEF”AULT;10014.地址不正确。修复错误的演员阵容。socklen\t*
newsockd = accept(sockd, (struct sockaddr*)&theirs,(socklen_t*) sizeof(theirs));
socklen_t sLen=sizeof(theirs);
..
newsockd=accept(sockd, (struct sockaddr*)&theirs,&sLen);