呒,照着书上打的一段基于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)