C++ socket编程

来源:互联网 发布:淘宝用是谁写的 编辑:程序博客网 时间:2024/05/24 15:39

 源代码项目下载:http://download.csdn.net/detail/mmyzlinyingjie/7049499

TCP类的:

 

TcpServer.cpp

//WSAStartup socket bind listen accept send/recv closesocket WSACleanup#include <winsock2.h>#include <stdio.h>#include <iostream>#include <windows.h>using namespace std;#pragma comment (lib,"ws2_32")#pragma comment (lib,"winmm")#define NAME_LEN 20int main(int argc , char* grgv[]){    cout<<"This is Server cmd"<<endl;     WSADATA wsaData;     WSAStartup(MAKEWORD(2,2),&wsaData);     //这个是服务器的socket,用来绑定网卡来监听     SOCKET s = socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);     sockaddr_in addr;     addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");     addr.sin_port = htons(827);     addr.sin_family = PF_INET;     bind(s,(SOCKADDR*)&addr,sizeof(SOCKADDR));     listen(s,1);     SOCKADDR clientAddr;     int nSize = sizeof(SOCKADDR);     //这个socket用来接收客户端发过来的信息     SOCKET clientSock;     //阻塞式,有客户端来连接时才会往下执行     //执行到这一步,说明客户端和服务器已经建立了连接     clientSock = accept(s,(SOCKADDR*)&clientAddr,&nSize);     cout<<"sending..."<<endl;     send(clientSock,"hello client \r\n",strlen("hello client \r\n" + sizeof(char)),NULL);     cout<<"sended"<<endl;        //不断的接收客户端发送过来的信息    while(TRUE)     {                    char buff[MAXBYTE] = {0};          //接收客户端发来的命令         int i=1;         i = recv(clientSock,buff,MAXBYTE,0);        if(i != -1)          cout<<"from client :"<<buff<<endl;       }     closesocket(clientSock);     closesocket(s);     WSACleanup();     return 0;}

 

TcpClient.cpp

#include <stdio.h>#include <winsock2.h>#include <iostream>#include <conio.h>#include <string>using namespace std;#pragma comment (lib,"ws2_32")#define NAME_LEN 20int main(int argc,char* argv[]){    cout<<"This is Client cmd"<<endl;     WSADATA wsaData;     WSAStartup(MAKEWORD(2,2),&wsaData);     //创建一个socket来连接服务端     SOCKET s = socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);     sockaddr_in addr;     addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");     addr.sin_family = PF_INET;     addr.sin_port = htons(827);     //这条执行后,说明和服务端建立了连接     connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR));     char Buff[MAXBYTE] = {0};     char Cmd[MAXBYTE] = {0};     recv(s,Buff , MAXBYTE,0);     cout<<"from server:"<<Buff<<endl;        //不断地给服务端发送信息     while(TRUE)     {        cin>>Cmd;        cout<<"you input command is:"<<Cmd<<endl;        send(s,Cmd,MAXBYTE,0);              }     getchar();     WSACleanup();     return 0;}

运行结果:

 

UDP:

UDPServer.cpp

#include <winsock2.h>#include <stdio.h>#include <iostream>#include <windows.h>using namespace std;#pragma comment (lib,"ws2_32")#pragma comment (lib,"winmm")int main(){    printf("This is UDP Server\n");    WORD wVersionRequested;    WSADATA wsaData;        wVersionRequested = MAKEWORD(1 , 1 );    WSAStartup( wVersionRequested, &wsaData );        SOCKET socketServer = socket(AF_INET,SOCK_DGRAM,0);    SOCKADDR_IN addr;    addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);    addr.sin_family = AF_INET;    addr.sin_port = htons(6000);        bind(socketServer,(SOCKADDR*)&addr,sizeof(SOCKADDR));            int len = sizeof(SOCKADDR);    SOCKADDR_IN addrClient;    char buf[100];    recvfrom(socketServer,buf,sizeof(buf),0,(SOCKADDR*)&addrClient,&len);    printf("%s",buf);        closesocket(socketServer);    WSACleanup();    return 0;}

 

UDPClient.cpp

 

#include <winsock2.h>#include <stdio.h>#include <iostream>#include <windows.h>using namespace std;#pragma comment (lib,"ws2_32")#pragma comment (lib,"winmm")int main(){    printf("This is UDP Client\n");    WORD wVersionRequested;    WSADATA wsaData;        wVersionRequested = MAKEWORD(1 , 1 );    WSAStartup( wVersionRequested, &wsaData );    SOCKET socketClient = socket(AF_INET,SOCK_DGRAM,0);    SOCKADDR_IN addr;    addr.sin_addr.S_un.S_addr = inet_addr("10.21.23.117");//"10.21.23.117"是你要发送的目的地    addr.sin_family = AF_INET;    addr.sin_port = htons(6000);    char buf[100];    sprintf(buf,"i MYNONA from cclient\n",inet_ntoa(addr.sin_addr));    sendto(socketClient,buf,sizeof(buf)+1,0,(SOCKADDR*)&addr,sizeof(SOCKADDR));    closesocket(socketClient);    WSACleanup();    return 0;}

 

运行结果:

0 0