网络编程学习笔记二 第一个客户端主程序

来源:互联网 发布:淘宝刷单挣钱吗 编辑:程序博客网 时间:2024/04/28 11:05

解释的比较清楚了。

// T2Client.cpp : 定义控制台应用程序的入口点。//#include<WinSock2.h>#include<iostream>#pragma  comment(lib,"WS2_32")using namespace std;int main(){ int result = 0; //这里来初始化WSADATA WSADATA wsadata; result = WSAStartup(MAKEWORD(2,2),&wsadata); if(0!=result)//写条件语句的时候最好数字写左边,不然有时候先写变量忘记了写数字的时候会出现意料不到的结果 {  cout<<"WSAStartup error"<<endl;  return 0; } int serverPort = 5150;//端口号 char FAR serverIP[]="192.168.1.101"; //这个是用来写服务器的地址的 SOCKADDR_IN serverAddr; memset(&serverAddr,0,sizeof(serverAddr)); serverAddr.sin_family      = AF_INET; serverAddr.sin_port        = htons(serverPort);//端口号 serverAddr.sin_addr.S_un.S_addr = inet_addr(serverIP);//服务器的IP地址  cout<<(inet_ntoa)(serverAddr.sin_addr)<<endl; //求得结构体的大小,用于后面的connect连接操作 int serverAddrSize = static_cast<int>(sizeof(SOCKADDR_IN)); //创建一个socket,用于对server对象的连接,连接过程可以理解为文件系统的FILE打开操作,打开好了就可以进行读或者写,对象网络中的收发消息 SOCKET socket_toServer ; socket_toServer = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP ); //第二,三个参数表示用TCP //如果创建socket对象失败 if(INVALID_SOCKET == socket_toServer) {  cout<<"Create SOCKET ERROR "<<WSAGetLastError()<<endl;//这个我理解为和windows核心编程中GetLastError()差不多  return 0; } result = connect(socket_toServer,(sockaddr*)&serverAddr,serverAddrSize);     //如果连接成功就返回0,否则不成功就返回SOCKET_ERROR  if(SOCKET_ERROR ==result) {  cout<<"connect error "<<WSAGetLastError()<<endl;  return 0; } //现在连接Ok了就可以去做想做的事情了 char sendbuff[2048]; char recvbuff[2048]; //无限循环,随时等待着服务器传来的消息,服务器也是这样 while(1) {  cout<<"please input something you want sent to server :";  cin>>sendbuff;  //开始传消息  int ret = send(socket_toServer,sendbuff,strlen(sendbuff),0);  if(SOCKET_ERROR ==ret) //如果发送成功则返回值为0  {   cout<<"send error"<<WSAGetLastError()<<endl;   break;  }    //处理接受的消息,由于之前没有accept和listen,这里使用recvfrom来接受         int nRecv = 0;         nRecv = recvfrom( socket_toServer, recvbuff, static_cast<int>( strlen(recvbuff) ), 0, (sockaddr *)&serverAddr, &serverAddrSize );   //接收成功,返回信息的文件大小  if(0<nRecv)  {   recvbuff[nRecv]='\0';//这个必须要写,这个是字符串的结束符,当年刚学C语言的时候对这个不了解,没写然后输出的时候输出好多烫.囧。      cout<<"receive :"<<recvbuff<<endl;   cout<<"from :"<<inet_ntoa(serverAddr.sin_addr)<<endl;  } } //最后做收尾的工作了 //首先就关闭你的socket closesocket(socket_toServer);  //这里,我们之前调用了WSAStartup现在来回收资源 if(SOCKET_ERROR ==WSACleanup()) {  cout<<"WSACleanup Error"<<WSAGetLastError()<<endl;  return 0; } return 0;} 

原创粉丝点击