网络编程学习笔记二 第一个客户端主程序
来源:互联网 发布:淘宝刷单挣钱吗 编辑:程序博客网 时间: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;}
- 网络编程学习笔记二 第一个客户端主程序
- 网络编程学习笔记一 第一个服务器端程序
- 第一个java网络编程的学习
- java 第一个网络编程的学习
- 网络编程__第一个服务端和客户端
- Python学习笔记17:网络客户端编程
- 第一个android客户端笔记
- 《Python网络基础》学习笔记(二)-网络客户端
- python 网络编程基础学习笔记(1)-网络客户端-socket
- 《ASP网络编程》学习笔记之二
- 《UNIX网络编程 》学习笔记 (二)
- 黑马程序员-学习笔记/网络编程二
- windows网络编程学习笔记二
- java_网络编程学习笔记(二)
- 网络编程学习笔记整理(二)
- python网络编程学习笔记(二)
- TCP/IP高效编程-改善网络程序的44个技巧学习笔记(二)
- 第一个学习笔记
- 杂记
- IP数据包的输入与输出
- Android调用系统相机拍照,并且模仿实现水印相机简单功能
- ubuntu 12.04(64位)下搭建android2.3/android4.2/4.1/4.0开发环境
- P64 E2(b)answer
- 网络编程学习笔记二 第一个客户端主程序
- IOS基础架构
- LA 3363 String Compression
- java web 常见问题备忘
- Access2010 数据库性能测试
- RC复位电路的原理及其复位时间的计算
- ibatis TypeHandler 编写
- 两分钟彻底让你明白Android中onInterceptTouchEvent与onTouchEvent(图文)!
- 清除行内元素之间的HTML空白