UDP之socket编程实例

来源:互联网 发布:企业网络信息平台构建 编辑:程序博客网 时间:2024/06/06 20:51

不讲解了,要求读者:
1. 知道UDP是什么
2. 索求Windows环境下的socket编程函数
3. 已经配置好了编译环境——在Tools-option-中的设置

客户端代码

#include <stdio.h>#include <winsock2.h>#include <iostream> #pragma comment(lib, "ws2_32.lib") using namespace std;bool BindSocket(SOCKET& socket,short port ,const char* Ip){    sockaddr_in address;    address.sin_family=AF_INET;    address.sin_addr.s_addr =inet_addr(Ip);    address.sin_port=htons(port);    if(SOCKET_ERROR == bind(socket,(const struct sockaddr*)&address,sizeof(struct sockaddr)) ){        return false;    }     return true;}int main(){    WORD wVersionRequested;    WSADATA wData;    int err;    int port;               //客户端端口号     int Otherport;          //服务器端口号     char IPaddr[18];        //客户端Ip     char OtherIP[18];       //服务器Ip     wVersionRequested = MAKEWORD( 1, 1 );   // 请求WinSock库    err = WSAStartup( wVersionRequested, &wData );    if(err!=0)  {return -1;}                // 返回值为零时表示成功WSAStartup    SOCKET sockCli = socket(AF_INET, SOCK_DGRAM, 0);        //创建Socket     if(sockCli < 0){        cout << "socket creation failed" << endl;        return 0;     }     cout << "socket created" << endl;    cout << "请输入本机IP:" << endl;     //输入客户端IP和端口号     gets(IPaddr);    printf("请输入本机端口号:\n");    cin >> port;    if(!BindSocket(sockCli,port,IPaddr)){   //将本地IP地址和端口号绑定到所创建的套接字上        cout << "Bind failed" << endl;        return 0;     }     cout << "Bind Socket success " << endl;    sockaddr_in address;                //服务器的IP和端口号     cout << "请输入服务器的IP" << endl;    cin >> OtherIP;    cout << "请输入服务器的端口号"  << endl;    cin >> Otherport;    address.sin_family=AF_INET;    address.sin_addr.s_addr=inet_addr(OtherIP);     address.sin_port=htons(Otherport);    char talk[100]="t";     for(int i=0;i<100;i++){         //发送100个数据包         sendto(sockCli,talk, sizeof(talk), 0,(const struct sockaddr*)&address,sizeof(struct sockaddr) );    }    closesocket(sockCli);     WSACleanup();     return 0; }

服务器代码:

#include <stdio.h>#include <iostream>// c++ include lib from windows#include <winsock2.h>#pragma comment(lib, "ws2_32.lib") using namespace std;bool BindSocket(SOCKET& socket,short port ,const char* Ip){    sockaddr_in address;    // set address of socket from socket family AF_INET;    address.sin_family=AF_INET;    address.sin_addr.s_addr =inet_addr(Ip);// set machine IP;     address.sin_port=htons(port);   // set machine port    // all above belong to net words;    if(SOCKET_ERROR == bind(socket,(const struct sockaddr*)&address,sizeof(struct sockaddr)) ){        return false;    }     return true;}int main(){    WORD wVersionRequested;    WSADATA wsaData;    int err;    int port;           //服务器端口号     char IPaddr[18];    //服务器Ip     sockaddr_in address;    int n=sizeof(struct sockaddr);    char talk[100]={0};    char buffer[100] = {0};    wVersionRequested = MAKEWORD( 1, 1 );   // 请求WinSock库      err = WSAStartup( wVersionRequested, &wsaData );    if(err!=0)  {return -1;}     SOCKET sockSrv = socket(AF_INET, SOCK_DGRAM, 0);        //创建Socket     /* Something about socket return value. */    if(sockSrv < 0){        cout << "socket creation failed" << endl;        return 0;    }    cout << "socket created" << endl;    cout << "请输入本机IP:" << endl;    cin >> IPaddr;    printf("请输入本机端口号:\n");    cin >> port;    //cout << IPaddr << endl << port << endl;    while(! BindSocket(sockSrv,port,IPaddr)){       //将本地IP地址和端口号绑定到所创建的套接字上         cout << "Bind fail" << endl;        cout << "请输入本机IP:" << endl;        cin >> IPaddr;        printf("请输入本机端口号:\n");        cin >> port;    }    cout << "Bind Socket success " << endl;    /*这里不知道对不对*/     int num =0;    // over-time setting, and ACKpp setting;    // more about recvfrom function;    while(1){           //接受来自客户端的数据包         if(recvfrom(sockSrv,buffer, 100,0,(struct sockaddr*)&address,&n) == SOCKET_ERROR ) {            cout << "接收失败"  << endl;         }        else{                num++;        }        cout << num << endl;// output situation;    }    closesocket(sockSrv);     WSACleanup();     return 0;}
原创粉丝点击