windows和linux中UDP编程

11 篇文章 0 订阅

//servser.cpp

#include <iostream>
#include <windows.h>
#include <stdio.h>
#include <string.h>
#define IP "127.0.0.1"
#define PORT 8888
#pragma comment(lib,"ws2_32.lib")

using namespace std;
char* GetTime();
int main()
{
    WSADATA wsaData;
    WORD Ret;
    if ((Ret = WSAStartup(MAKEWORD(2, 2), &wsaData) != 0))
    {
        cout << "WSAStartup() Error Whit:" << Ret << endl;
        WSACleanup();
        return -1;
    }//统一版本类型。

    SOCKET sockSer, sockCli;
    sockSer = socket(AF_INET,SOCK_DGRAM,0);
    SOCKADDR_IN addrSer, addrCli;


    memset(&addrSer,0,sizeof(addrSer));
    memset(&addrCli,0,sizeof(addrCli));


    addrSer.sin_family = AF_INET;
    addrSer.sin_port = htons(PORT);
    addrSer.sin_addr.S_un.S_addr = inet_addr(IP);

    int len = sizeof(SOCKADDR);
    bind(sockSer,(SOCKADDR*)&addrSer,len);

    char serbuff[255];

    //不需要监听连接。

    while (1)
    {
        recvfrom(sockSer,serbuff,sizeof(serbuff),0,(SOCKADDR*)&addrCli,&len);
        cout << serbuff << endl;
        sendto(sockSer, GetTime(), 30, 0, (SOCKADDR*)&addrCli, len);
    }
    WSACleanup();
    closesocket(sockSer);
    closesocket(sockCli);
    return 0;
}
char* GetTime()
{
    char buff[255];
    SYSTEMTIME sys;
    GetLocalTime(&sys);//初始化本地时间。
    sprintf(buff,"%d:%d:%d:%d:%d:%d",sys.wYear,sys.wMonth,sys.wDay,sys.wHour,sys.wMinute,sys.wSecond);
    return buff;
}

#include <iostream>
#include <windows.h>
#define PORT 8888
#define IP "127.0.0.1"
using namespace std;

#pragma comment(lib,"ws2_32.lib")
int main()
{
    DWORD Ret;
    WSAData wsaData;
    if ((Ret = WSAStartup(MAKEWORD(2, 2), &wsaData)) != 0)
    {
        cout <<"WSAStartup() Error Wiht : "<< Ret << endl;
        WSACleanup();
        return -1;
    }

    SOCKET sockCli = socket(AF_INET,SOCK_DGRAM,0);
    SOCKADDR_IN addrSer;
    addrSer.sin_family = AF_INET;
    addrSer.sin_port = htons(PORT);
    addrSer.sin_addr.S_un.S_addr = inet_addr(IP);

    int len = sizeof(addrSer);
    const char timebuff[] = "times";
    char serbuff[255];

    connect(sockCli,(SOCKADDR*)&addrSer,len);

    while (1)
    {
        sendto(sockCli,timebuff,strlen(timebuff)+1,0,(SOCKADDR*)&addrSer,len);
        recvfrom(sockCli,serbuff,sizeof(serbuff),0,(SOCKADDR*)&addrSer,&len);
        cout <<timebuff<<serbuff << endl;
        Sleep(2000);
    }
    return 0;
}

//linux:
//ser.cpp

#include <iostream>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <string.h>
#define PORT 8888
#define IP "127.0.0.1"
using namespace std;
int main()
{
    int sockSer = socket(AF_INET,SOCK_DGRAM,0);
    sockaddr_in addrSer,addrCli;
    addrSer.sin_family = AF_INET;
    addrSer.sin_port = htons(PORT);
    addrSer.sin_addr.s_addr = inet_addr(IP);

    socklen_t len=sizeof(sockaddr);
    bind(sockSer,(sockaddr*)&addrSer,len);
    char serbuff[255]="!Hello !I am server!";
    char clibuff[255];
    while(1)
    {
       recvfrom(sockSer,clibuff,sizeof(clibuff),0,(sockaddr*)&addrSer,&len);
       cout<<"CLient Say:"<<clibuff<<endl;
       sendto(sockSer,serbuff,strlen(serbuff)+1,0,(sockaddr*)&addrSer,len);
    }
    return 0;
}

//cli.cpp

#include <iostream>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define PORT 8888
#define IP "127.0.0.1"

using namespace std;
int main()
{
    int sockCli = socket(AF_INET,SOCK_DGRAM,0);
    sockaddr_in addrSer;
    addrSer.sin_family = AF_INET;
    addrSer.sin_port = htons(PORT);
    addrSer.sin_addr.s_addr = inet_addr(IP);

    socklen_t len = sizeof(sockaddr);
    char clibuff[]="hello! I am client!";
    char serbuff[255];
    while(1)
    {
      sendto(sockCli,clibuff,strlen(clibuff)+1,0,(sockaddr*)&addrSer,len);
      recvfrom(sockCli,serbuff,sizeof(serbuff),0,(sockaddr*)&addrSer,&len);
    cout<<"Server Say:>"<<serbuff<<endl;
    sleep(2);
    }
    return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值