C socket TCP/UDP client/server example codes

来源:互联网 发布:php curl 设置编码 编辑:程序博客网 时间:2024/05/01 05:45


TCP Client:

#include <winsock2.h>#include <stdio.h>#pragma  comment(lib,"ws2_32.lib")int main(int argc, char* argv[]){WORD sockVersion = MAKEWORD(2,2);WSADATA data; if(WSAStartup(sockVersion, &data) != 0){return 0;}int sclient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if(sclient == INVALID_SOCKET){printf("invalid socket !");return 0;}struct sockaddr_in serAddr;serAddr.sin_family = AF_INET;serAddr.sin_port = htons(8888);serAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); if (connect(sclient, (struct sockaddr *)&serAddr, sizeof(serAddr)) == SOCKET_ERROR){printf("connect error !");closesocket(sclient);return 0;}char * sendData = "你好,TCP服务端,我是客户端!\n";send(sclient, sendData, strlen(sendData), 0);char recData[255];int ret = recv(sclient, recData, 255, 0);if(ret > 0){recData[ret] = 0x00;printf(recData);}closesocket(sclient);WSACleanup();return 0;}


TCP server:

#include <stdio.h>#include <winsock2.h>#pragma comment(lib,"ws2_32.lib")int main(int argc, char* argv[]){//初始化WSAWORD sockVersion = MAKEWORD(2,2);WSADATA wsaData;if(WSAStartup(sockVersion, &wsaData)!=0){return 0;}//创建套接字SOCKET slisten = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if(slisten == INVALID_SOCKET){printf("socket error !");return 0;}//绑定IP和端口sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(8888);sin.sin_addr.S_un.S_addr = INADDR_ANY; if(bind(slisten, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR){printf("bind error !");}//开始监听if(listen(slisten, 5) == SOCKET_ERROR){printf("listen error !");return 0;}//循环接收数据SOCKET sClient;sockaddr_in remoteAddr;int nAddrlen = sizeof(remoteAddr);char revData[255]; while (true){printf("等待连接...\n");sClient = accept(slisten, (SOCKADDR *)&remoteAddr, &nAddrlen);if(sClient == INVALID_SOCKET){printf("accept error !");continue;}printf("接受到一个连接:%s \r\n", inet_ntoa(remoteAddr.sin_addr));//接收数据int ret = recv(sClient, revData, 255, 0);if(ret > 0){revData[ret] = 0x00;printf(revData);}//发送数据char * sendData = "你好,TCP客户端!\n";send(sClient, sendData, strlen(sendData), 0);closesocket(sClient);}closesocket(slisten);WSACleanup();return 0;}



UDP client:

/*    Simple udp client    Silver Moon (m00n.silv3r@gmail.com)*/#include<stdio.h>#include<winsock2.h> #pragma comment(lib,"ws2_32.lib") //Winsock Library #define SERVER "127.0.0.1"  //ip address of udp server#define BUFLEN 512  //Max length of buffer#define PORT 8888   //The port on which to listen for incoming data int main(void){    struct sockaddr_in si_other;    int s, slen=sizeof(si_other);    char buf[BUFLEN];    char message[BUFLEN];    WSADATA wsa;     //Initialise winsock    printf("\nInitialising Winsock...");    if (WSAStartup(MAKEWORD(2,2),&wsa) != 0)    {        printf("Failed. Error Code : %d",WSAGetLastError());        exit(EXIT_FAILURE);    }    printf("Initialised.\n");         //create socket    if ( (s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == SOCKET_ERROR)    {        printf("socket() failed with error code : %d" , WSAGetLastError());        exit(EXIT_FAILURE);    }         //setup address structure    memset((char *) &si_other, 0, sizeof(si_other));    si_other.sin_family = AF_INET;    si_other.sin_port = htons(PORT);    si_other.sin_addr.S_un.S_addr = inet_addr(SERVER);         //start communication    while(1)    {        printf("Enter message : ");        gets(message);                 //send the message        if (sendto(s, message, strlen(message) , 0 , (struct sockaddr *) &si_other, slen) == SOCKET_ERROR)        {            printf("sendto() failed with error code : %d" , WSAGetLastError());            exit(EXIT_FAILURE);        }                 //receive a reply and print it        //clear the buffer by filling null, it might have previously received data        memset(buf,'\0', BUFLEN);        //try to receive some data, this is a blocking call        if (recvfrom(s, buf, BUFLEN, 0, (struct sockaddr *) &si_other, &slen) == SOCKET_ERROR)        {            printf("recvfrom() failed with error code : %d" , WSAGetLastError());            exit(EXIT_FAILURE);        }                 puts(buf);    }     closesocket(s);    WSACleanup();     return 0;}



UDP server:

/*    Simple UDP Server*/ #include<stdio.h>#include<winsock2.h> #pragma comment(lib,"ws2_32.lib") //Winsock Library #define BUFLEN 512  //Max length of buffer#define PORT 8888   //The port on which to listen for incoming data int main(){    SOCKET s;    struct sockaddr_in server, si_other;    int slen , recv_len;    char buf[BUFLEN];    WSADATA wsa;     slen = sizeof(si_other) ;         //Initialise winsock    printf("\nInitialising Winsock...");    if (WSAStartup(MAKEWORD(2,2),&wsa) != 0)    {        printf("Failed. Error Code : %d",WSAGetLastError());        exit(EXIT_FAILURE);    }    printf("Initialised.\n");         //Create a socket TCP:SOCK_STREAM  UDP:SOCK_DGRAM    if((s = socket(AF_INET , SOCK_DGRAM , 0 )) == INVALID_SOCKET)    {        printf("Could not create socket : %d" , WSAGetLastError());    }    printf("Socket created.\n");         //Prepare the sockaddr_in structure    server.sin_family = AF_INET;    server.sin_addr.s_addr = INADDR_ANY;    server.sin_port = htons( PORT );         //Bind    if( bind(s ,(struct sockaddr *)&server , sizeof(server)) == SOCKET_ERROR)    {        printf("Bind failed with error code : %d" , WSAGetLastError());        exit(EXIT_FAILURE);    }    puts("Bind done");     //keep listening for data    while(1)    {        printf("Waiting for data...");        fflush(stdout);                 //clear the buffer by filling null, it might have previously received data        memset(buf,'\0', BUFLEN);                 //try to receive some data, this is a blocking call        if ((recv_len = recvfrom(s, buf, BUFLEN, 0, (struct sockaddr *) &si_other, &slen)) == SOCKET_ERROR)        {            printf("recvfrom() failed with error code : %d" , WSAGetLastError());            exit(EXIT_FAILURE);        }                 //print details of the client/peer and the data received        printf("Received packet from %s:%d\n", inet_ntoa(si_other.sin_addr), ntohs(si_other.sin_port));        printf("Data: %s\n" , buf);                 //now reply the client with the same data        if (sendto(s, buf, recv_len, 0, (struct sockaddr*) &si_other, slen) == SOCKET_ERROR)        {            printf("sendto() failed with error code : %d" , WSAGetLastError());            exit(EXIT_FAILURE);        }    }       closesocket(s);    WSACleanup();         return 0;}


参考网站:

http://www.binarytides.com/udp-socket-programming-in-winsock/

http://www.tenouk.com/Winsock/Winsock2example9.html


0 0
原创粉丝点击