upd套接字服务器与客户端交互C++代码示范
upd套接字服务器与客户端交互C++代码示范
1 // vc2_2_4UDPserver_Txwtech.cpp : 定义控制台应用程序的入口点。 2 //服务器端 3 #include "StdAfx.h" 4 #include <WinSock2.h> 5 #include<stdio.h> 6 #include<Windows.h> 7 #pragma comment(lib,"WS2_32.lib") 8 int main() 9 { 10 WSADATA data; 11 WORD w=MAKEWORD(2,0); 12 char sztext[1024]="欢迎您\r\n"; 13 ::WSAStartup(w,&data); 14 SOCKET s; 15 s=::socket(AF_INET, SOCK_DGRAM,0); 16 sockaddr_in addr,addr2; 17 int n=sizeof(addr2); 18 char buff[1024]={0}; 19 addr.sin_family=AF_INET; 20 addr.sin_port=htons(75); 21 addr.sin_addr.S_un.S_addr=INADDR_ANY; 22 ::bind(s,(sockaddr*)&addr,sizeof(addr)); 23 printf("UDP服务器已经启动txwtech,输入qq可退出\r\n"); 24 while(1) 25 { 26 char cc[1024]={0}; //此处如果索引值设置小了,就会出问题。不如:char cc[1];是由于建立的数组下标溢出造成的 27 //c=getchar(); 28 // c=''; 29 //cc[1024]={0}; 30 printf("我说:"); 31 scanf("%s",cc); 32 //sztext=c; 33 // strcpy(sztext,c); 34 if (strcmp(cc,"qq")==0) 35 36 { 37 printf("即将退出%s",cc); 38 ::Sleep(1000); 39 ::closesocket(s); 40 ::WSACleanup(); 41 strcpy(cc,""); 42 return 0; 43 } 44 strcat(sztext,cc); 45 if(::recvfrom(s,buff,10,0,(sockaddr*)&addr2,&n)!=0) 46 { 47 //printf("%s已经连接上\r\n",inet_ntoa(addr2.sin_addr)); 48 printf("客户说:%s\r\n",buff); 49 //strcat(sztext,buff); 50 51 52 // ::sendto(s,sztext,sizeof(sztext),0,(sockaddr*)&addr2,n); 53 ::sendto(s,cc,sizeof(cc),0,(sockaddr*)&addr2,n); 54 // break; 55 56 } 57 58 } 59 ::closesocket(s); 60 ::WSACleanup(); 61 62 if(getchar()) 63 { 64 return 0; 65 //::sendto(s,sztext,sizeof(sztext),0,(sockaddr*)&addr2,n); 66 } 67 else 68 { 69 ::Sleep(100); 70 } 71 }
1 // vc2_2_4upd_Client.cpp : 定义控制台应用程序的入口点。 2 //txwtech,客户端 3 4 #include "stdafx.h" 5 #include <winsock2.h> 6 #include <stdio.h> 7 #include <Windows.h> 8 #pragma comment(lib,"WS2_32.lib") 9 int main() 10 { 11 WSADATA data; 12 WORD w=MAKEWORD(2,0); 13 ::WSAStartup(w,&data); 14 SOCKET s; 15 s=::socket(AF_INET,SOCK_DGRAM,0); 16 sockaddr_in addr,addr2; 17 int n=sizeof(addr2); 18 char buff[1024]={0}; 19 addr.sin_family=AF_INET; 20 addr.sin_port=htons(75); 21 addr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1"); 22 printf("UDP客户端已经启动txwtech,输入qq可退出\r\n"); 23 char sztext[1024]="您好\r\n"; 24 while(1) 25 { 26 char cc1[1024]; 27 //c=getchar(); 28 // c=''; 29 printf("我说:"); 30 scanf("%s",cc1); 31 //sztext=c; 32 // strcpy(sztext,c); 33 if (strcmp(cc1,"qq")==0) 34 35 { 36 printf("即将退出%s",cc1); 37 ::Sleep(1000); 38 ::closesocket(s); 39 ::WSACleanup(); 40 return 0; 41 } 42 // sztext=cc; 43 strcpy(sztext,cc1); 44 //if(::sendto(s,sztext,sizeof(sztext),0,(sockaddr*)&addr,n)!=0) 45 if(::sendto(s,cc1,sizeof(sztext),0,(sockaddr*)&addr,n)!=0) 46 { 47 ::recvfrom(s,buff,10,0,(sockaddr*)&addr2,&n); 48 printf("服务器说:%s\r\n",buff); 49 /*::closesocket(s); 50 ::WSACleanup();*/ 51 } 52 } 53 if(getchar()) 54 //return 0; 55 ::sendto(s,sztext,sizeof(sztext),0,(sockaddr*)&addr,n); 56 else 57 ::Sleep(100); 58 }
欢迎讨论,相互学习。
cdtxw@foxmail.com