建立一个档案 client.cpp 并贴上以下程式码
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define BUFFER_SIZE 512
#define SERVER_PORT 3001
int main(int argc, char **argv)
{
int nSocket = 0;
int nStrLen = 0;
struct sockaddr_in addrServer, addrClient;
char cSendBuffer[BUFFER_SIZE], cRecvBuffer[BUFFER_SIZE];
memset(&addrClient, 0, sizeof(addrClient));
memset(&addrServer, 0, sizeof(addrServer));
addrServer.sin_family = AF_INET;
addrServer.sin_port = htons(SERVER_PORT);
if (argc>=2)
addrServer.sin_addr.s_addr = inet_addr(argv[1]);
else
addrServer.sin_addr.s_addr = inet_addr("127.0.0.1");
nSocket = socket(AF_INET, SOCK_DGRAM, 0);
socklen_t nLen = sizeof(struct sockaddr);
for(;;) {
printf("Please Input Mesage:");
fgets(cSendBuffer, BUFFER_SIZE, stdin);
if (strncmp(cSendBuffer, "exit", 4) == 0) break;
nStrLen = strlen(cSendBuffer);
sendto(nSocket, cSendBuffer, nStrLen+1, 0, (struct sockaddr *) &addrServer, nLen);
int nLen = recvfrom(nSocket, cRecvBuffer, BUFFER_SIZE, 0, NULL, NULL);
printf("Receive %d bytes\n", nLen);
printf("Echo: %s\n", cRecvBuffer);
}
return 0;
}再来建立一个档案 server.cpp 并贴上以下程式码
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define BUFFER_SIZE 512
#define SERVER_PORT 3001
int main(int argc, char **argv)
{
int nServerSockFd;
struct sockaddr_in addrServer, addrClient;
socklen_t nLen = sizeof(struct sockaddr);
char cRevBuffer[BUFFER_SIZE];
memset(&addrClient, 0, sizeof(addrClient));
memset(&addrServer, 0, sizeof(addrServer));
addrServer.sin_family = AF_INET;
addrServer.sin_port = htons(SERVER_PORT);
if (argc >= 2)
addrServer.sin_addr.s_addr = inet_addr(argv[1]);
else
addrServer.sin_addr.s_addr = inet_addr("127.0.0.1");
nServerSockFd = socket(AF_INET, SOCK_DGRAM, 0);
bind(nServerSockFd, (struct sockaddr *)&addrServer, sizeof(addrServer));
for (;;){
int nReadBytes =recvfrom(nServerSockFd, cRevBuffer, sizeof(cRevBuffer), 0,
(struct sockaddr *)&addrClient, &nLen);
sendto(nServerSockFd, cRevBuffer, nReadBytes, 0, (struct sockaddr *)&addrClient, nLen);
}
return 0;
}编译这两个档案
sudo apt install g++ -y g++ -o udpEchoClient client.cpp g++ -o udpEchoServer server.cpp
执行 SERVER
./udpEchoServer
开启另外一个终端机,执行 client
./udpEchoClient
Latest posts by SHXJ (see all)
- 受保护的内容: NAS 版 Mathbot 管理网站与 Linebot 启动方法 - 2024 年 11 月 15 日
- Realtime 啥鬼的 - 2021 年 6 月 15 日
- nodejs 数学游戏 - 2021 年 6 月 8 日


