socket端口接收问题

来源:百度知道 编辑:UC知道 时间:2024/06/06 10:46:09
socket端口接收问题
悬赏分:50 - 离问题结束还有 14 天 23 小时
该文件中主要定义了两个socket通信的线程:
//发送在线信息(线程A)
HANDLE h1=Create(NULL,0,Online,(LPVOID)Name,0,NULL)
//接收其他信息(线程B)
HANDLE h2=Create(NULL,0,Recv,(LPVOID)Name,0,NULL)
......
//发送线程大致结构
{
while(1)
{
//socket版本配置
...
SOCKET tSocket = (AF_INET,SOCK_DGRAM,IPP_UDP);
sockaddr_in recv;
char buf[1024] = {0};
recv.sin_famliy = AF_INET;
recv.sin_port = htons(8000);
recv.sin_addr.s_addr = htonl(INADDR_ANY);
sendto(tSocket,buf,strlen(buf),0,(SOCKADDR*)&recv,sizeof(recv));
//关闭套接字
}
}
//接收信息(线程B)基本结构为:
{
while(1)
{
//socket版本配置
...
SOCKET rSocket = (AF_INET,SOCK_DGRAM,IPP_UDP);
sockaddr_in recv;
sockaddr_in sender;
int senderSize = sizeof(sender);
char buf[1024] = {0};
recv.sin_famliy = AF_INET;
recv.sin_port = htons(10000);
recv.sin_addr.s_addr = htonl(

嗯是有这个情况.自己发自己端口会乱接,那你的C现成8000开着的话,那现成B10000就不会接到8000端口的信息了.OK,谁没有事自己发自己内容啊,晕.建议C监视8000一直开着,这样B就收不到自己的8000了,或者你自己判断,弄个协议啊嘿嘿,比如说发来的文本的第一行表示是需要发到哪个端口的,拿出来判断下是否对就行了,再说,你得将自己发给自己的SOCKET事先判断出来或者接收到后看IP相同就不处理OK

recvfrom(rSocket ,buf,strlen(buf),0,(SOCKADDR*)&sender,&senderSize);

不要接收strlen(buf)的长度,因为这个长度是0.

改为1024.

recvfrom(rSocket ,buf,1024,0,(SOCKADDR*)&sender,&senderSize);