那位高手给解释一下。在基于UDP的socket编程的时候。
服务器程序这样写,运行会出现。乱码啊?#include <stdio.h>
#include <Winsock2.h>//包含Socket库头文件。void main()
{
//1*********************************
//加载Socket库。
//选中然后同时按下alt f8键可以自动样式排列。
WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD( 1, 1 );
//用MAKEWORD宏请求一个1.1版本的WinSock 库

err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {

return;
}
if ( LOBYTE( wsaData.wVersion ) != 1||
        HIBYTE( wsaData.wVersion ) != 1 ) 
{
                          
WSACleanup( );
return;  }
//服务器程序
//1。创建套接字。
SOCKET sockSrv = socket( AF_INET, SOCK_DGRAM, 0 );
//2。将套接字绑定到一个本地地址和端口上面。
SOCKADDR_IN addSrv;
addSrv.sin_addr.S_un.S_addr = htonl( INADDR_ANY );
addSrv.sin_family = AF_INET;
addSrv.sin_port = htons( 6000 );
bind( sockSrv, (SOCKADDR*)&addSrv, sizeof( SOCKADDR ) );
//3。等待接受数据。
SOCKADDR_IN addrClient;
int len = sizeof(SOCKADDR);
char recvBuff[100];
recvfrom( sockSrv, recvBuff, 100, 0, (SOCKADDR*)&addrClient, &len );
printf( "%s\n", recvBuff );
///4。关闭套接字。
closesocket( sockSrv );

WSACleanup();//中止对套接字库的使用。

解决方案 »

  1.   

    以下是客户程序的编写。和上面的服务器程序结合,并不能实现信息传输。到底是那里出了问题啊。请高手门指教。不胜感激。#include <stdio.h>
    #include <Winsock2.h>//包含Socket库头文件。void main()
    {
    //1*********************************
    //加载Socket库。
    //选中然后同时按下alt f8键可以自动样式排列。
    WORD wVersionRequested;
    WSADATA wsaData;
    int err;

    wVersionRequested = MAKEWORD( 1, 1 );
    //用MAKEWORD宏请求一个1.1版本的WinSock 库

    err = WSAStartup( wVersionRequested, &wsaData );
    if ( err != 0 ) {

    return;
    }
    if ( LOBYTE( wsaData.wVersion ) != 1||
            HIBYTE( wsaData.wVersion ) != 1 ) 
    {
                              
    WSACleanup( );
    return;  } SOCKET sockClient = socket( AF_INET, SOCK_DGRAM, 0 );
    //2.向服务器发送数据。
    SOCKADDR_IN addSrv;
    addSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
    addSrv.sin_family = AF_INET;
    addSrv.sin_port = htons( 6000 ); sendto( sockClient, "I am guodong!", strlen("I am guodong!") + 1, 0,
    ( SOCKADDR* )&addSrv, sizeof( SOCKADDR ));
    //3.关闭套接字。

     closesocket( sockClient );
     WSACleanup();//终止对套接字库的使用。
    }
      

  2.   

    recvfrom( sockSrv, recvBuff, 100, 0, (SOCKADDR*)&addrClient, &len );
    printf( "%s\n", recvBuff );////////////////////////////////////////////int ret = recvfrom( sockSrv, recvBuff, 100, 0, (SOCKADDR*)&addrClient, &len );
    if(ret==SOCKET_ERROR)
      return;
    recvBuff[ret] = '\0';
    printf( "%s\n", recvBuff );
      

  3.   

    谢谢啊 。你的意思是防止溢出出吗?
    int ret = recvfrom( sockSrv, recvBuff, 100, 0, (SOCKADDR*)&addrClient, &len );
    如果执行正确的话。返回的是哪一个参数啊?是不是recvBuff的长度啊?
    udp的数据传输是靠什么实现的啊。总是弄不明白。上面的服务程序和客户程序到底是通过
    哪种方式连接在一块的。能给大概的讲解一下吗? 不胜感激。
    是不是我的编译器有问题。今天我再一次运行上面的代码可以运行出正确结果。
      

  4.   

    ret正常收到数据会返回内容的数据长度。
    udp传输靠什么实现?
    这个问题去看书吧!
    程序员自家蜂产品专卖
    http://shop33712512.taobao.com