windows tcp c++
2012-10-06 22:41 kennyMc 阅读(830) 评论(0) 收藏 举报最基本的tcp同步实现
c头文件里面的东西真是难看,还是c#用着舒服
#include <iostream> #include <Winsock.h> #pragma comment(lib,"WS2_32") using namespace std; class CInitSock { private: WSADATA WsaData; //如果是系统无法识别的版本,那么会默认一个系统期待的版本 WORD WinSockVer; public: CInitSock(BYTE LVer=2,BYTE HVer=2) { WinSockVer=MAKEWORD(LVer,HVer); } int LoadWinSock() { //参考http://msdn.microsoft.com/en-us/library/ms742213(VS.85).aspx return WSAStartup(WinSockVer,&WsaData); } }; CInitSock cisk; int main() { int _result=cisk.LoadWinSock(); if(_result!=0) { cout<<"WSAStartup_ERROR:"<<_result<<endl; return 1; } SOCKET listen=socket( AF_INET,//地址格式,貌似winsock中是写死AF_INET SOCK_STREAM,//流套字节 IPPROTO_TCP); if(listen==INVALID_SOCKET) { cout<<"socket_ERROR:INVALID_SOCKET"<<endl; return 1; } sockaddr_in sin; sin.sin_family=AF_INET; sin.sin_port=htons(5678);//转成网络字节顺序 sin.sin_addr.S_un.S_addr=INADDR_ANY; if(bind(listen,(sockaddr*)&sin,sizeof(sin))==SOCKET_ERROR) { cout<<"bind_ERROR:SOCKET_ERROR"<<endl; return 1; } //开始监听,未处理连接最大数测试用10 if(::listen(listen,10)==SOCKET_ERROR) { cout<<"listen_ERROR:SOCKET_ERROR"<<endl; return 1; } SOCKET client; sockaddr_in remoteAddr; int len=sizeof(remoteAddr); const char message[]="welcome"; int len_msg=strlen(message); while(true) { client=accept(listen,(SOCKADDR*)&remoteAddr,&len); if(client==INVALID_SOCKET) { cout<<"accept_ERROR:INVALID_SOCKET"<<endl; continue; } cout<<"客户端连接:"<<inet_ntoa(remoteAddr.sin_addr) <<":"<<remoteAddr.sin_port<<endl; send(client,message,len_msg,0); closesocket(client); } closesocket(listen); system("PAUSE"); return 0; }
CInitSock cisk; int main() { int _result=cisk.LoadWinSock(); if(_result!=0) { cout<<"WSAStartup_ERROR:"<<_result<<endl; return 1; } SOCKET s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if(s==INVALID_SOCKET) { cout<<"socket_ERROR:INVALID_SOCKET"<<endl; return 1; } sockaddr_in serverAddr; serverAddr.sin_family=AF_INET; serverAddr.sin_port=htons(5678); serverAddr.sin_addr.S_un.S_addr=inet_addr("192.168.0.100"); if(connect(s,(sockaddr*)&serverAddr,sizeof(serverAddr))==-1) { cout<<"connect_ERROR:-1"<<endl; return 1; } char buff[1024]; int nRecv=recv(s,buff,1024,0); if(nRecv>0) { buff[nRecv]='\0'; cout<<"服务端信息:"<<buff<<endl; } system("PAUSE"); return 0; }
本文版权归kennyMc和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
浙公网安备 33010602011771号