找回密码
 立即注册
搜索
查看: 223|回复: 1

winsock 高手请指点!

[复制链接]

40

主题

515

回帖

738

积分

高级会员

积分
738
发表于 2003-5-22 11:43:56 | 显示全部楼层 |阅读模式
我的一段服务器程序为什么不能接收数据?#include <stdio.h>
#include <stdlib.h>
#include <winsock.h>

void main()
{
        WORD wVersionRequested;
        WSADATA wsaData;
        int err;
        wVersionRequested = MAKEWORD ( 1,1 );
        err = WSAStartup ( wVersionRequested, &wsaData );
        if (err != 0)
                {printf ("can't find winsock32.dll");
                 return;
                }
        struct sockaddr_in server,client;
        err = socket (AF_INET,SOCK_DGRAM,0);
        server.sin_family = AF_INET;
        server.sin_port = htons(88);
        server.sin_addr.s_addr = inet_addr ("192.168.0.2");
        if ( bind ( err, (struct sockaddr *)&server, sizeof(server)) != 0 )
                {printf("bind failed!%d",WSAGetLastError());
                 return;
                }
       
        char recvBuffer[512];
        client.sin_family = AF_INET;
        client.sin_port = htons(66);
        client.sin_addr.s_addr = inet_addr("192.168.0.2");
        int fromlen, recvlen;
        fromlen = sizeof(client);
        recvlen = recvfrom ( err, (char *)&recvBuffer, 512, 0, (struct sockaddr *)&client, &fromlen );
        if( recvlen == SOCKET_ERROR )
                {
                        printf( "Data receive failed \n" );
                        return ;
                }
                else
                {printf( "Receive Message = %s \n", recvBuffer );}
        closesocket(err);
}
客户端是可以发送的
#include <stdio.h>
#include <stdlib.h>
#include <winsock.h>

void main()
{
        WORD wVersionRequested;
        WSADATA wsaData;
        int err;
        wVersionRequested = MAKEWORD( 1,1 );
        err = WSAStartup( wVersionRequested, &wsaData );
        if ( err!=0 )
                {        printf("can't find winsock32.dll");
                        return;
                }
        struct sockaddr_in client,server;

        err = socket (AF_INET,SOCK_DGRAM,0);
        client.sin_family = AF_INET;
        client.sin_port = htons(66);
        client.sin_addr.s_addr = inet_addr("192.168.0.2");
        if (bind(err,(struct sockaddr *)&client,sizeof(client))!=0)
                {        printf("bind failed!%d",WSAGetLastError());
                        return;
                }
        server.sin_family = AF_INET;
        server.sin_port = htons(88);
        server.sin_addr.s_addr = inet_addr("192.168.0.2");

        char sendBuffer[512];
        int sendlen;
        sendlen = sendto(err,(const char * )&sendBuffer,512,0,(struct sockaddr * )&server,sizeof(server));
        if ( sendlen == SOCKET_ERROR)
                {printf ("send failed!");
                }
        else{printf ("send succeed!%s\n",sendBuffer);}
        closesocket (err);
        }

134

主题

1122

回帖

1709

积分

荣誉版主

积分
1709
发表于 2003-5-22 12:47:31 | 显示全部楼层
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD ( 1,1 );
err = WSAStartup ( wVersionRequested, &wsaData );
if (err != 0)
{printf ("can't find winsock32.dll");
return;
}

struct sockaddr_in server,client;
err = socket (AF_INET,SOCK_DGRAM,0);
if(err==INVALID_SOCKET)
{printf("Create Socket failed!%d",WSAGetLastError());
return;
}
server.sin_family = AF_INET;
server.sin_port = htons(88);
server.sin_addr.s_addr = inet_addr ("192.168.0.2");
if ( bind ( err, (struct sockaddr *)&server, sizeof(struct sockaddr)) != 0 )
{printf("bind failed!%d",WSAGetLastError());
return;
}

char recvBuffer[512]="";
int fromlen, recvlen;
recvlen = recvfrom ( err, (char *)&recvBuffer, 512, 0, (struct sockaddr *)&client, &fromlen );
if( recvlen == SOCKET_ERROR )
{
printf( "Data receive failed:%d \n",WSAGetLastError());
return ;
}
else
{printf( "Receive Message = %s \n", recvBuffer );}
closesocket(err);
}

}

改了一下,试一下,关键要看errno,这样就知道是什么错误了。
对于windows平台下的一些函数,要仔细看MSDN,函数参数到底是干什么用的,是输入参数还是输出参数要看明白。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|海浩社区

GMT+8, 2025-9-21 23:49 , Processed in 0.075758 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表