建立一個檔案名為 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 3002
int main(int argc, char** argv)
{
int nServerSockFd, nDataSockFd;
struct sockaddr_in addrServer, addrClient;
char cRevBuffer[BUFFER_SIZE];
int nRcvLen;
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_STREAM, 0);
if (bind(nServerSockFd, (struct sockaddr*)&addrServer, sizeof(addrServer)) == 1){
printf("Error: bind()\n");
return 0;
}
if (listen(nServerSockFd, 10) == -1){
printf("Error: listen()\n");
return 0;
}
socklen_t sLen = sizeof(addrClient);
nDataSockFd = accept(nServerSockFd, (struct sockaddr *)&addrClient, &sLen);
if(nDataSockFd == -1){
printf("Error: accept()\n");
return 0;
}
for(;;){
memset(cRevBuffer, 0, BUFFER_SIZE);
nRcvLen = read(nDataSockFd, cRevBuffer, BUFFER_SIZE);
if(write(nDataSockFd, cRevBuffer, nRcvLen) == -1){
printf("Error: accept()\n");
return 0;
}
}
close(nDataSockFd);
close(nServerSockFd);
return 0;
}
再次建立一個檔案名稱為 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 3002
int main(int argc, char **argv)
{
int nSockFd;
struct sockaddr_in addrClient, addrServer;
socklen_t sLen;
char cSendBuffer[BUFFER_SIZE], cRecvBuffer[BUFFER_SIZE];
int nRcvLen;
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");
nSockFd = socket(AF_INET, SOCK_STREAM, 0);
if (connect(nSockFd, (struct sockaddr*)&addrServer, sizeof(addrServer)) == -1){
printf("Error: connect()\n");
return(0);
}
for (;;){
printf("Please input Mesage: ");
fgets(cSendBuffer, BUFFER_SIZE, stdin);
if (strncmp(cSendBuffer, "exit", 4) == 0) break;
write(nSockFd, cSendBuffer, BUFFER_SIZE);
int nLen = read(nSockFd, cRecvBuffer, BUFFER_SIZE);
printf("Receive %d bytes\n", nLen);
printf("Echo: %s\n", cRecvBuffer);
}
close(nSockFd);
return 0;
}
再來編譯這兩個檔案
g++ -o client client.cpp g++ -o server server.cpp
編譯完成後開啟一個終端機執行 server 端程式
./server
開啟另外一個終端機,執行 client 程式並且輸入訊息,就可以得到相同的回覆了
./client 4A6G0062
Latest posts by SHXJ (see all)
- 受保護的內容: NAS 版 Mathbot 管理網站與 Linebot 啟動方法 - 2024 年 11 月 15 日
- Realtime 啥鬼的 - 2021 年 6 月 15 日
- nodejs 數學遊戲 - 2021 年 6 月 8 日


