读书人

呒照着书上打的一段基于TCP的网络应

发布时间: 2012-06-17 21:02:01 作者: rapoo

呒,照着书上打的一段基于TCP的网络应用程序,没效果?
这里是服务端程序

C/C++ code
#include "WinSock2.h"#include "stdio.h"#pragma   comment(lib,   "ws2_32.lib ")int main(){    WORD wVersionRequested; //定义一个WORD类型变量用来保存WinSock库的版本号    WSADATA wsaData;     int err;    wVersionRequested = MAKEWORD(1,1); //调用MAKEWORD宏创建一个请求版本号的WORD值    err=WSAStartup( wVersionRequested,&wsaData); //WSAStartup函数加载套接字库    if(err != 0) //如果其返回值不等于0,那么程序退出    {        return 0;    }    if(LOBYTE(wsaData.wVersion )!=1 ||        HIBYTE( wsaData.wVersion )!=1) //判断wsaData.wVersion 的低字节和高字节是否都等于1    {        WSACleanup();//如果不是我们所请求的版本,那么调用WSACleanup函数终止对Winsock库的使用并返回        return 0;    }    //创建套接字(socket)    SOCKET sockSrv = socket(AF_INET , SOCK_STREAM, 0); //定义一个SOCKET类型变量,用来接收socket返回的套接字        SOCKADDR_IN addrSrv;//定义一个SOCKADDR_IN类型的变量:addrSrv    addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//给addrSrv的sin_addr.S_un.S_addr成员赋值,应按网络字节顺序表示,故此使用htonl函数    addrSrv.sin_family = AF_INET;//只能为AF_INET    addrSrv.sin_port = htonl(6020); //指定网络端口号,应为1024以上端口,此处为6000    bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));//调用bind函数把套接字sockSrv绑定到本地地址和指定的端口号上    //1.绑定套接字 2.第二个参数需要指针,则用取地址符来实现,进行强制类型转换    listen(sockSrv,5);//将套接字设定为监听模式,准备接受客户请求    SOCKADDR_IN addrClient;//用来接受客户端的地址信息    int len=sizeof(SOCKADDR);    while(1)    {        //等待客户到来        SOCKET sockConn = accept(sockSrv,(SOCKADDR*)&addrClient,&len);//调用accept函数等待并接受客户的连接请求。        char sendBuf[100];        sprintf(sendBuf,"i'm Erebus,%s",inet_ntoa(addrClient.sin_addr));//将客户端地址进行格式化处理后放到这个数组里        send(sockConn,sendBuf,strlen(sendBuf)+1,0);//利用send函数向用户发送数据        //从客户端接受数据        char recvBuf[100];//用来保存接收的数据        recv(sockConn,recvBuf,100,0);        printf("%s\n",recvBuf);//显示接受的数据        closesocket(sockConn);//关闭套接字    }}


C/C++ code
这里是客户端程序#include <WinSock2.h>#include <stdio.h>#pragma  comment(lib,"ws2_32.lib")int main(){    WORD wVersionRequested;    WSADATA wsaData;    int err;        wVersionRequested = MAKEWORD(1,1);    err = WSAStartup( wVersionRequested,&wsaData);    if(err != 0)    {                return 0;    }        if(LOBYTE(wsaData.wVersion )!=1 ||        HIBYTE(wsaData.wVersion)!=1)    {        WSACleanup();        return 0;    }        SOCKET sockClient = socket(AF_INET,SOCK_STREAM,0);    SOCKADDR_IN addrSrv;    addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");    addrSrv.sin_family = AF_INET;    addrSrv.sin_port = htons(6020);    connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));    char recvBuf[100];    memset(recvBuf,0,100);    recv(sockClient,recvBuf,100,0);    printf("%s\n",recvBuf);    send(sockClient,"one lisi",strlen("one lisi")+1,0);    closesocket(sockClient);    WSACleanup();    system("pause");}



然后我先打开了服务器程序,再打开客户端程序,毫无效果啊!



[解决办法]
addrSrv.sin_port = htonl(6020);
--------------
htons(6020)

读书人网 >VC/MFC

热点推荐