建立一個檔案 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 日


