socket代码学习笔记
2017-08-26 15:48
323 查看
//可以运行但未测试结果 #include <Ws2tcpip.h> #pragma comment(lib,"Ws2_32.lib") #include <stdio.h> #include <Winsock2.h> #include <Windows.h> void main() { WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD(1, 1); err = WSAStartup(wVersionRequested, &wsaData); if (err != 0) { return; } if (LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1) { WSACleanup(); return; } SOCKET sockSrv = socket(AF_INET, SOCK_STREAM, 0); SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY); addrSrv.sin_family = AF_INET; addrSrv.sin_port = htons(6000); bind(sockSrv, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR)); listen(sockSrv, 5); SOCKADDR_IN addrClient; int len = sizeof(SOCKADDR); while (1) { SOCKET sockConn = accept(sockSrv, (SOCKADDR*)&addrClient, &len); char sendBuf[50]; sprintf_s(sendBuf, "Welcome %s to here!", addrClient.sin_addr); send(sockConn, sendBuf, strlen(sendBuf) + 1, 0); char recvBuf[50]; recv(sockConn, recvBuf, 50, 0); printf("%s\n", recvBuf); closesocket(sockConn); } } //////////////////// #include <WINSOCK2.H> #include <stdio.h> #pragma comment(lib,"ws2_32.lib") int main() { int err; WORD versionRequired; WSADATA wsaData; versionRequired = MAKEWORD(1, 1); err = WSAStartup(versionRequired, &wsaData);//协议库的版本信息 if (!err) { printf("客户端嵌套字已经打开!\n"); } else { printf("客户端的嵌套字打开失败!\n"); return 0;//结束 } SOCKET clientSocket = socket(AF_INET, SOCK_STREAM, 0); SOCKADDR_IN clientsock_in; clientsock_in.sin_addr.S_un.S_addr = ULONG("192.168.155.2"); clientsock_in.sin_family = AF_INET; clientsock_in.sin_port = htons(6000); //bind(clientSocket,(SOCKADDR*)&clientsock_in,strlen(SOCKADDR));//注意第三个参数 //listen(clientSocket,5); if (connect(clientSocket, (SOCKADDR*)&clientsock_in, sizeof(SOCKADDR)) != SOCKET_ERROR) printf("connect succeed!\n"); else printf("connect failed!\n"); //开始连接 char receiveBuf[100]; recv(clientSocket, receiveBuf, 101, 0); //printf("%s\n", receiveBuf); if (send(clientSocket, "hello,this is client", strlen("hello,this is client") + 1, 0) != SOCKET_ERROR) printf("send message succeed!\n"); else printf("send message faild!\n"); closesocket(clientSocket); WSACleanup(); system("pause"); return 0; } /////////////////// 服务端 #include <stdio.h> //用于printf等函数的调用 #include <winsock2.h> //Socket的函数调用 #pragma comment (lib, "ws2_32") int main() { WSADATA wsaData; WSAStartup(MAKEWORD(2, 2), &wsaData); SOCKET s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); sockaddr_in sockaddr; sockaddr.sin_family = PF_INET; sockaddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); //需要绑定到本地的哪个IP地址 sockaddr.sin_port = htons(9000); //需要监听的端口 bind(s, (SOCKADDR*)&sockaddr, sizeof(SOCKADDR)); //进行绑定动作 listen(s, 1); //启动监听 printf("listening on port [%d].\n", 9000); while (TRUE) { SOCKADDR clientAddr; int size = sizeof(SOCKADDR); SOCKET clientsocket; clientsocket = accept(s, &clientAddr, &size); //阻塞,直到有新tcp客户端连接 printf("***SYS*** New client touched.\n"); char* msg = "Hello, my client.\r\n"; send(clientsocket, msg, strlen(msg) + sizeof(char), NULL); //这里的第三个参数要注意,是加了一个char长度的 printf("***SYS*** HELLO.\n"); while (TRUE) { char buffer[MAXBYTE] = { 0 }; recv(clientsocket, buffer, MAXBYTE, NULL); //一直接收客户端socket的send操作 printf("***Client*** %s\n", buffer); } closesocket(clientsocket); //关闭socket } closesocket(s); WSACleanup(); //卸载 getchar(); exit(0); return 0; } //客户端 #include <stdio.h> //用于输入、输出函数的调用,printf, gets #include <winsock2.h> //socket头文件 #include <Windows.h> //为了方便调试,所以加入了等待2秒才进行连接server,这里用到了sleep函数 int main() { Sleep(2000); //沉睡2秒再连接server WSADATA wsaData; WSAStartup(MAKEWORD(2, 2), &wsaData); SOCKET s=socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); sockaddr_in sockaddr; sockaddr 10a27 .sin_family=PF_INET; sockaddr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1"); sockaddr.sin_port=htons(9000); connect(s, (SOCKADDR*)&sockaddr, sizeof(SOCKADDR)); char buffer[MAXBYTE]={0}; recv(s, buffer, MAXBYTE, NULL); printf("***SERVER***%s", buffer); while(TRUE) { char* mymsg=new char[100000]; printf("You can chat with server now:\n"); gets(mymsg); send(s, mymsg, strlen(mymsg)+sizeof(char), NULL); /* recv函数中的bufferlength参数是可以固定值的 send函数中的bufferlength参数不能固定值,需要看实际长度,并且考虑到'\0'字符串 */ } closesocket(s); WSACleanup(); getchar(); exit(0); } ///////////////// 可用服务端 #include <stdio.h> #include <Winsock2.h> //windows socket的头文件 #pragma comment( lib, "ws2_32.lib" )// 链接Winsock2.h的静态库文件 int main() { //初始化winsocket WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 1, 1 );//第一个参数为低位字节;第二个参数为高位字节 err = WSAStartup( wVersionRequested, &wsaData );//对winsock DLL(动态链接库文件)进行初始化,协商Winsock的版本支持,并分配必要的资源。 if ( err != 0 ) { return 0; } if ( LOBYTE( wsaData.wVersion ) != 1 ||HIBYTE( wsaData.wVersion ) != 1 )//LOBYTE()取得16进制数最低位;HIBYTE()取得16进制数最高(最左边)那个字节的内容 { WSACleanup( ); return 0; } SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);//创建socket。AF_INET表示在Internet中通信;SOCK_STREAM表示socket是流套接字,对应tcp;0指定网络协议为TCP/IP SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY); //htonl用来将主机字节顺序转换为网络字节顺序(to network long) //INADDR_ANY就是指定地址为0.0.0.0的地址, //表示不确定地址,或“任意地址”。” addrSrv.sin_family=AF_INET; addrSrv.sin_port=htons(4000);//htons用来将主机字节顺序转换为网络字节顺序(to network short) bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));//将本地地址绑定到所创建的socket上,以使在网络上标识该socket listen(sockSrv,5);//socket监听,准备接受连接请求。 SOCKADDR_IN addrClient; int len=sizeof(SOCKADDR); while(1) { SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);//为一个连接请求提供服务。addrClient包含了发出连接请求的客户机IP地址信息;返回的新socket描述服务器与该客户机的连接 char sendBuf[50]; sprintf(sendBuf,"Welcome %s to here!",inet_ntoa(addrClient.sin_addr));//inet_ntoa网络地址转换转点分十进制的字符串指针 send(sockConn,sendBuf,strlen(sendBuf)+1,0); char recvBuf[50]; recv(sockConn,recvBuf,50,0); printf("%s\n",recvBuf); closesocket(sockConn); Sleep(2000);//2000毫秒 } WSACleanup(); return 0; } ////////// #include <stdio.h> #include <Winsock2.h> #pragma comment( lib, "ws2_32.lib" ) void main() { WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 1, 1 );//第一个参数为低位字节;第二个参数为高位字节 err = WSAStartup( wVersionRequested, &wsaData );//对winsock DLL(动态链接库文件)进行初始化,协商Winsock的版本支持,并分配必要的资源。 if ( err != 0 ) { return; } if ( LOBYTE( wsaData.wVersion ) != 1 ||HIBYTE( wsaData.wVersion ) != 1 )//LOBYTE()取得16进制数最低位;HIBYTE()取得16进制数最高(最左边)那个字节的内容 { WSACleanup( ); return; } for(int index=0;;index++) { SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0); SOCKADDR_IN addrClt;//需要包含服务端IP信息 addrClt.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");// inet_addr将IP地址从点数格式转换成网络字节格式整型。 addrClt.sin_family=AF_INET; addrClt.sin_port=htons(4000); connect(sockClient,(SOCKADDR*)&addrClt,sizeof(SOCKADDR));//客户机向服务器发出连接请求 char recvBuf[50]; recv(sockClient,recvBuf,50,0); printf("my reply is : %s\n",recvBuf); char sendBuf[50]; sprintf(sendBuf,"%3d,",index); strcat(sendBuf,"server node of: yaopeng"); send(sockClient,sendBuf,strlen(sendBuf)+1,0); closesocket(sockClient); Sleep(2000); } WSACleanup(); } ///////////////////////////////////// 可用简单代码 #include <iostream> #include <cstdio> #include <WinSock2.h> using namespace std; char send_buf[100]; char recv_buf[100]; int client = 0; int reclient = 0; int main() { WORD w_version_request; WSADATA wsa_data; int error; w_version_request = MAKEWORD(1, 1); error = WSAStartup(w_version_request, &wsa_data); if (error != 0) { cout << "动态库初始化失败!\n"; system("pause"); return -1; } if (LOBYTE(wsa_data.wVersion) != 1 || HIBYTE(wsa_data.wVersion) != 1) { WSACleanup(); system("pause"); return -1; } SOCKET sock_srv = socket(AF_INET, SOCK_STREAM, 0); sockaddr_in addr_srv; addr_srv.sin_addr.S_un.S_addr = htonl(INADDR_ANY); addr_srv.sin_family = AF_INET; addr_srv.sin_port = htons(4000); bind(sock_srv, (SOCKADDR*)&addr_srv, sizeof(SOCKADDR)); listen(sock_srv, 5); SOCKADDR_IN addr_client; int len = sizeof(SOCKADDR); while (1) { SOCKET sock_conn; sock_conn = accept(sock_srv, (SOCKADDR*)&addr_client, &len); if(sock_conn) { client++; sprintf_s(send_buf, "welcome %d to here!\n", client); send(sock_conn, send_buf, strlen(send_buf)+1,0); } if (recv(sock_conn, recv_buf, 100, 0)) { cout << recv_buf << endl; } //cout << sock_conn<<" "<< addr_client.sin_addr.S_un.S_addr << endl; } WSACleanup(); return 0; } //////// #include <stdio.h> #include <Winsock2.h> #include <iostream> using namespace std; #pragma comment( lib, "ws2_32.lib" ) void main() { WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 1, 1 );//第一个参数为低位字节;第二个参数为高位字节 err = WSAStartup( wVersionRequested, &wsaData );//对winsock DLL(动态链接库文件)进行初始化,协商Winsock的版本支持,并分配必要的资源。 if ( err != 0 ) { return; } if ( LOBYTE( wsaData.wVersion ) != 1 ||HIBYTE( wsaData.wVersion ) != 1 )//LOBYTE()取得16进制数最低位;HIBYTE()取得16进制数最高(最左边)那个字节的内容 { WSACleanup( ); return; } for(int index=0;;index++) { SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0); SOCKADDR_IN addrClt;//需要包含服务端IP信息 addrClt.sin_addr.S_un.S_addr=inet_addr("192.168.155.3");// inet_addr将IP地址从点数格式转换成网络字节格式整型。 addrClt.sin_family=AF_INET; addrClt.sin_port=htons(4000); connect(sockClient,(SOCKADDR*)&addrClt,sizeof(SOCKADDR));//客户机向服务器发出连接请求 char recvBuf[50]; recv(sockClient,recvBuf,50,0); //printf("my reply is : %d\n",sockClient); char sendBuf[50]; //sprintf(sendBuf,"%d",sockClient); //strcat(sendBuf,"server node of: yaopeng"); if(cin>>sendBuf) send(sockClient,sendBuf,strlen(sendBuf)+1,0); closesocket(sockClient); Sleep(2000); } WSACleanup(); } int date=20160812; char file_name[100]; sprintf(file_name,"时间:%d.txt",date); myfile.open(file_name,ios::out); 文件名应该是:时间:20160812.txt ///////////////////////////////////
相关文章推荐
- volatile的工作机制代码测试之socket学习笔记
- Libevent学习笔记,异步非阻塞SOCKET,从初等到高等代码
- 学习笔记(10) : Socket 编程典型代码积累
- FastSocket学习笔记~制定自已的传输协议~续~制定基于FastSocket的协议
- 学习设计模式原则之依赖倒置原则,代码笔记
- 「学习笔记」3.25代码学习
- iOS 即时通讯 Socket使用学习笔记
- php学习的笔记。包括ubuntu16.04不显示php代码的验证码(windeow下正常)等等,实时更新
- 步步为营 .NET 代码重构学习笔记 十
- 学习笔记 --- LINNUX 使用异步通讯机制实现按键驱动代码分析
- PHP学习笔记 - 在Eclipse中使用XDebug调试代码 | Using XDebug debug code in eclipse
- GCC-3.4.6源代码学习笔记(30)
- 步步为营 .NET 代码重构学习笔记 八
- 《重构-改善既有代码的设计》学习笔记(二)
- VS2010 学习笔记 TDD (5) 重整代码(二)
- java SSL安全socket的通讯实例-java学习笔记(4)
- GCC-3.4.6源代码学习笔记(137)
- 学习笔记(二)C#获取当前正在执行的代码的命名空间、类、方法的名称
- Unity Shader 学习笔记 (一) 创建Shader自带代码解读
- linux 驱动学习笔记02--应用实例:在内核中新增驱动代码目录和子目录