首页 > 代码库 > Windows下C语言的Socket编程例子(TCP和UDP)
Windows下C语言的Socket编程例子(TCP和UDP)
一。 <TCP>
server端:
1 #include "stdafx.h" 2 #include <stdio.h> 3 #include <winsock2.h> 4 5 #pragma comment(lib,"ws2_32.lib") 6 7 int main(int argc, char* argv[]) 8 { 9 //初始化WSA10 WORD sockVersion = MAKEWORD(2,2);11 WSADATA wsaData;12 if(WSAStartup(sockVersion, &wsaData)!=0)13 {14 return 0;15 }16 17 //创建套接字18 SOCKET slisten = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);19 if(slisten == INVALID_SOCKET)20 {21 printf("socket error !");22 return 0;23 }24 25 //绑定IP和端口26 sockaddr_in sin;27 sin.sin_family = AF_INET;28 sin.sin_port = htons(8888);29 sin.sin_addr.S_un.S_addr = INADDR_ANY; 30 if(bind(slisten, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)31 {32 printf("bind error !");33 }34 35 //开始监听36 if(listen(slisten, 5) == SOCKET_ERROR)37 {38 printf("listen error !");39 return 0;40 }41 42 //循环接收数据43 SOCKET sClient;44 sockaddr_in remoteAddr;45 int nAddrlen = sizeof(remoteAddr);46 char revData[255]; 47 while (true)48 {49 printf("等待连接...\n");50 sClient = accept(slisten, (SOCKADDR *)&remoteAddr, &nAddrlen);51 if(sClient == INVALID_SOCKET)52 {53 printf("accept error !");54 continue;55 }56 printf("接受到一个连接:%s \r\n", inet_ntoa(remoteAddr.sin_addr));57 58 //接收数据59 int ret = recv(sClient, revData, 255, 0); 60 if(ret > 0)61 {62 revData[ret] = 0x00;63 printf(revData);64 }65 66 //发送数据67 char * sendData = http://www.mamicode.com/"你好,TCP客户端!\n";68 send(sClient, sendData, strlen(sendData), 0);69 closesocket(sClient);70 }71 72 closesocket(slisten);73 WSACleanup();74 return 0;75 }
client端:
1 #include "stdafx.h" 2 #include <WINSOCK2.H> 3 #include <STDIO.H> 4 5 #pragma comment(lib,"ws2_32.lib") 6 7 8 int main(int argc, char* argv[]) 9 {10 WORD sockVersion = MAKEWORD(2,2);11 WSADATA data; 12 if(WSAStartup(sockVersion, &data) != 0)13 {14 return 0;15 }16 17 SOCKET sclient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);18 if(sclient == INVALID_SOCKET)19 {20 printf("invalid socket !");21 return 0;22 }23 24 sockaddr_in serAddr;25 serAddr.sin_family = AF_INET;26 serAddr.sin_port = htons(8888);27 serAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); 28 if (connect(sclient, (sockaddr *)&serAddr, sizeof(serAddr)) == SOCKET_ERROR)29 {30 printf("connect error !");31 closesocket(sclient);32 return 0;33 }34 char * sendData = http://www.mamicode.com/"你好,TCP服务端,我是客户端!\n";35 send(sclient, sendData, strlen(sendData), 0);36 37 char recData[255];38 int ret = recv(sclient, recData, 255, 0);39 if(ret > 0)40 {41 recData[ret] = 0x00;42 printf(recData);43 }44 closesocket(sclient);45 WSACleanup();46 return 0;47 }
二. <UDP>
SERVER 端
1 #include "stdafx.h" 2 #include <stdio.h> 3 #include <winsock2.h> 4 5 #pragma comment(lib, "ws2_32.lib") 6 7 int main(int argc, char* argv[]) 8 { 9 WSADATA wsaData;10 WORD sockVersion = MAKEWORD(2,2);11 if(WSAStartup(sockVersion, &wsaData) != 0)12 {13 return 0;14 }15 16 SOCKET serSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); 17 if(serSocket == INVALID_SOCKET)18 {19 printf("socket error !");20 return 0;21 }22 23 sockaddr_in serAddr;24 serAddr.sin_family = AF_INET;25 serAddr.sin_port = htons(8888);26 serAddr.sin_addr.S_un.S_addr = INADDR_ANY;27 if(bind(serSocket, (sockaddr *)&serAddr, sizeof(serAddr)) == SOCKET_ERROR)28 {29 printf("bind error !");30 closesocket(serSocket);31 return 0;32 }33 34 sockaddr_in remoteAddr;35 int nAddrLen = sizeof(remoteAddr); 36 while (true)37 {38 char recvData[255]; 39 int ret = recvfrom(serSocket, recvData, 255, 0, (sockaddr *)&remoteAddr, &nAddrLen);40 if (ret > 0)41 {42 recvData[ret] = 0x00;43 printf("接受到一个连接:%s \r\n", inet_ntoa(remoteAddr.sin_addr));44 printf(recvData); 45 }46 47 char * sendData = http://www.mamicode.com/"一个来自服务端的UDP数据包\n";48 sendto(serSocket, sendData, strlen(sendData), 0, (sockaddr *)&remoteAddr, nAddrLen); 49 50 }51 closesocket(serSocket); 52 WSACleanup();53 return 0;54 }
CLIENT 端
1 #include "stdafx.h" 2 #include <stdio.h> 3 #include <winsock2.h> 4 5 #pragma comment(lib, "ws2_32.lib") 6 7 int main(int argc, char* argv[]) 8 { 9 WORD socketVersion = MAKEWORD(2,2);10 WSADATA wsaData; 11 if(WSAStartup(socketVersion, &wsaData) != 0)12 {13 return 0;14 }15 SOCKET sclient = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);16 17 sockaddr_in sin;18 sin.sin_family = AF_INET;19 sin.sin_port = htons(8888);20 sin.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");21 int len = sizeof(sin);22 23 char * sendData = http://www.mamicode.com/"来自客户端的数据包.\n";24 sendto(sclient, sendData, strlen(sendData), 0, (sockaddr *)&sin, len);25 26 char recvData[255]; 27 int ret = recvfrom(sclient, recvData, 255, 0, (sockaddr *)&sin, &len);28 if(ret > 0)29 {30 recvData[ret] = 0x00;31 printf(recvData);32 }33 34 closesocket(sclient);35 WSACleanup();36 return 0;37 }
本文来至:http://blog.csdn.net/ssun125/article/details/8525823
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。