C语言的Socket编程例子(TCP和UDP)

来源:互联网 发布:知果果 知呱呱 编辑:程序博客网 时间:2024/05/22 20:13

<TCP>

server端:

#include "stdafx.h"#include <stdio.h>#include <winsock2.h>#pragma comment(lib,"ws2_32.lib")int main(int argc, char* argv[]){    //初始化WSA    WORD 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;}


client端:

 

#include "stdafx.h"#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;    }    SOCKET sclient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);    if(sclient == INVALID_SOCKET)    {        printf("invalid socket !");        return 0;    }    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, (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;}


 

二. <UDP>

SERVER 端

 

 

#include "stdafx.h"#include <stdio.h>#include <winsock2.h>#pragma comment(lib, "ws2_32.lib") int main(int argc, char* argv[]){    WSADATA wsaData;    WORD sockVersion = MAKEWORD(2,2);    if(WSAStartup(sockVersion, &wsaData) != 0)    {        return 0;    }    SOCKET serSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);     if(serSocket == INVALID_SOCKET)    {        printf("socket error !");        return 0;    }    sockaddr_in serAddr;    serAddr.sin_family = AF_INET;    serAddr.sin_port = htons(8888);    serAddr.sin_addr.S_un.S_addr = INADDR_ANY;    if(bind(serSocket, (sockaddr *)&serAddr, sizeof(serAddr)) == SOCKET_ERROR)    {        printf("bind error !");        closesocket(serSocket);        return 0;    }        sockaddr_in remoteAddr;    int nAddrLen = sizeof(remoteAddr);     while (true)    {        char recvData[255];          int ret = recvfrom(serSocket, recvData, 255, 0, (sockaddr *)&remoteAddr, &nAddrLen);        if (ret > 0)        {            recvData[ret] = 0x00;            printf("接受到一个连接:%s \r\n", inet_ntoa(remoteAddr.sin_addr));            printf(recvData);                    }        char * sendData = "一个来自服务端的UDP数据包\n";        sendto(serSocket, sendData, strlen(sendData), 0, (sockaddr *)&remoteAddr, nAddrLen);        }    closesocket(serSocket);     WSACleanup();    return 0;}


CLIENT 端

 

#include "stdafx.h"#include <stdio.h>#include <winsock2.h>#pragma comment(lib, "ws2_32.lib") int main(int argc, char* argv[]){    WORD socketVersion = MAKEWORD(2,2);    WSADATA wsaData;     if(WSAStartup(socketVersion, &wsaData) != 0)    {        return 0;    }    SOCKET sclient = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);        sockaddr_in sin;    sin.sin_family = AF_INET;    sin.sin_port = htons(8888);    sin.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");    int len = sizeof(sin);        char * sendData = "来自客户端的数据包.\n";    sendto(sclient, sendData, strlen(sendData), 0, (sockaddr *)&sin, len);    char recvData[255];         int ret = recvfrom(sclient, recvData, 255, 0, (sockaddr *)&sin, &len);    if(ret > 0)    {        recvData[ret] = 0x00;        printf(recvData);    }    closesocket(sclient);    WSACleanup();    return 0;}


 

5 1
原创粉丝点击