VC网络编程 Socket套接字编程

来源:互联网 发布:北京数据录入公司 编辑:程序博客网 时间:2024/05/08 05:28

基于TCP的Socket编程

TCP服务器:

#include<winsock2.h>//包含头文件#include<stdio.h>#include<windows.h>#pragma comment(lib,"WS2_32.lib") //显式连接套接字库int main() //主函数开始{WSADATA data; //定义WSADATA结构体对象WORD w=MAKEWORD(2,0);//定义版本号码char sztext[]="欢迎你\r\n";//定义并初始化发送到客户端的字符数组::WSAStartup(w,&data);//初始化套接字库SOCKET s,s1; //定义连接套接字和数据收发套接字句柄s=::socket(AF_INET,SOCK_STREAM,0);//创建TCP套接字sockaddr_in addr,addr2;//定义套接字地址结构int n=sizeof(addr2);//获取套接字地址结构大小addr.sin_family=AF_INET;//初始化地址结构addr.sin_port=htons(75);addr.sin_addr.S_un.S_addr=INADDR_ANY;::bind(s,(sockaddr*)&addr,sizeof(addr));//绑定套接字::listen(s,5);//监听套接字printf("服务器已经启动\r\n");//输出提示信息while(true){s1=::accept(s,(sockaddr*)&addr2,&n);//接受连接请求if(s1!=NULL){printf("%s已经连接上\r\n",inet_ntoa(addr2.sin_addr));::send(s1,sztext,sizeof(sztext),0);//向客户端发送字符数组}::closesocket(s);//关闭套接字句柄::closesocket(s1);::WSACleanup();//释放套接字库if(getchar()) //如果有输入,则关闭程序{return 0; //正常结束程序}else{::Sleep(100); //应用睡眠0.1秒}}}


TCP客户端:

#include<winsock2.h>//包含头文件#include<stdio.h>#include<windows.h>#pragma comment(lib,"WS2_32.lib") //显式连接套接字库int main() //主函数开始{WSADATA data; //定义WSADATA结构体对象WORD w=MAKEWORD(2,0);//定义版本号码::WSAStartup(w,&data);//初始化套接字库SOCKET s; //定义连接套接字句柄char sztext[10]={0};s=::socket(AF_INET,SOCK_STREAM,0);//创建TCP套接字sockaddr_in addr;//定义套接字地址结构addr.sin_family=AF_INET;//初始化地址结构addr.sin_port=htons(75);addr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");printf("客户端已经启动\r\n");//输出提示信息::connect(s,(sockaddr*)&addr,sizeof(addr));::recv(s,sztext,sizeof(sztext),0);printf("%s\r\n",sztext);::closesocket(s);//关闭套接字句柄::WSACleanup();//释放套接字库if(getchar()) //如果有输入,则关闭程序{return 0; //正常结束程序}else{::Sleep(100); //程序睡眠}}


基于UDP的Socket编程

UDP服务器:

#include<winsock2.h>//包含头文件#include<stdio.h>#include<windows.h>#pragma comment(lib,"WS2_32.lib") //连接套接字库int main(){WSADATA data; //定义结构体变量WORD w=MAKEWORD(2,0);//定义套接字版本char sztext[]="欢迎你\r\n";//定义欢迎信息::WSAStartup(w,&data);//初始化套接字库SOCKET s; //定义套接字句柄s=::socket(AF_INET, SOCK_DGRAM,0);//创建UDP套接字sockaddr_in addr,addr2;//套接字地址结构变量int n=sizeof(addr2);//地址结构变量大小char buff[10]={0};//接收数据缓冲区addr.sin_family=AF_INET;addr.sin_port=htons(75);addr.sin_addr.S_un.S_addr=INADDR_ANY;    ::bind(s,(sockaddr*)&addr,sizeof(addr)); //绑定套接字printf("UDP服务器已经启动\r\n");//显示提示信息while(1){if(::recvfrom(s,buff,10,0,(sockaddr*)&addr2,&n)!=0)//接收客户端信息{printf("%s已经连接上\r\n",inet_ntoa(addr2.sin_addr));printf("%s\r\n",buff);::sendto(s,sztext,sizeof(sztext),0,(sockaddr*)&addr2,n);//发送数据到客户端break;} }::closesocket(s);//关闭套接字对象::WSACleanup();//释放套接字库if(getchar()) //如果有输入,则关闭程序{  return 0; //正常结束程序}else{  ::Sleep(100);//应用程序睡眠}}


UDP客户端:

#include<winsock2.h>//包含头文件#include<stdio.h>#include<windows.h>#pragma comment(lib,"WS2_32.lib") //连接套接字库int main(){WSADATA data; //定义结构体变量WORD w=MAKEWORD(2,0);//初始化套接字版本号::WSAStartup(w,&data);//初始化套接字库SOCKET s; //定义套接字s=::socket(AF_INET,SOCK_DGRAM,0);//创建UDP套接字sockaddr_in addr,addr2;//定义套接字地址int n=sizeof(addr2);char buff[10]={0};addr.sin_family=AF_INET;addr.sin_port=htons(75);addr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");printf("UDP客户端已经启动\r\n");char sztext[]="你好\r\n";if(::sendto(s,sztext,sizeof(sztext),0,(sockaddr*)&addr,n)!=0)//发送信息{::recvfrom(s,buff,10,0,(sockaddr*)&addr2,&n);//接收信息printf("服务器说:%s\r\n",buff);::closesocket(s);//关闭套接字::WSACleanup();//释放套接字库} if(getchar()) //如果有输入,则关闭程序{return 0; //正常结束程序}else{::Sleep(100); //应用程序睡眠}}


0 1
原创粉丝点击