linux udp通信程序

服务端程序为:

#include
#include
#include
#include
#include
#include
#include
 
int main()
{
    struct sockaddr_in srvAddr;
    bzero(&srvAddr,sizeof(srvAddr));
    srvAddr.sin_family = AF_INET;
    srvAddr.sin_addr.s_addr = htonl(INADDR_ANY);
    srvAddr.sin_port = htons(8888);
    int srvAddrLen = sizeof(srvAddr);
 
    int iSock = socket(AF_INET, SOCK_DGRAM, 0);  // udp
    bind(iSock, (struct sockaddr *)&srvAddr, sizeof(srvAddr));
 
    while(1)
    {
        getchar(); // 卡住
        char szBuf[1024] = {0};
        recvfrom(iSock, szBuf, sizeof(szBuf) - 1, 0, (struct sockaddr *)&srvAddr, (socklen_t*)&srvAddrLen); // 注意: 这里用srvAddr是不好的,应该用cliAddr,表示对方地址
        printf("msg from client [%s]\n", szBuf);
    }
 
    close(iSock);
    return 0;
}

        客户端程序为:
#include
#include
#include
#include
#include
#include
#include
 
int main()
{
    struct sockaddr_in srvAddr;
    bzero(&srvAddr, sizeof(srvAddr));
    srvAddr.sin_family = AF_INET;
    srvAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
    srvAddr.sin_port = htons(8888);
 
    int iSock = socket(AF_INET, SOCK_DGRAM, 0); // udp
    int i = 0;
    while(1)
    {
        printf("press enter to send data\n");
        getchar(); // 卡住
        char szBuf[32] = {0};
        snprintf(szBuf, sizeof(szBuf), "hello %d", ++i);
        sendto(iSock, szBuf, strlen(szBuf) + 1, 0, (struct sockaddr *)&srvAddr, sizeof(srvAddr));
    }
 
    close(iSock);
    return 0;
}
        makefile为:
all: server client

server: server.o
    g++ -o server  server.o

client: client.o
    g++ -o client  client.o

server.o: server.cpp
    g++ -c server.cpp

client.o:client.cpp
    g++ -c client.cpp

clean:
    rm -f server client *.o

        编译并运行, 先启动服务端, 然后启动客户端。 因为程序中有getchar卡住, 所以我们需要按enter键来控制客户端的发送和服务端的接受。
--------------------- 
原文:https://blog.csdn.net/stpeace/article/details/73699517 
 

你可能感兴趣的:(TCP/IP)