4.15 and 4.16, TCP communication implementation (local machine)
1.TCP communication
①TCP communication (server)
#include <iostream>
#include <arpa/inet.h>
#include <unistd.h>
#include <cstring>
using namespace std;
int main() {
int server_listen_fd = socket(AF_INET, SOCK_STREAM, 0);
if (server_listen_fd == -1) {
perror("socket");
exit(-1);
}
sockaddr_in saddr;
saddr.sin_addr.s_addr = INADDR_ANY;
saddr.sin_family = AF_INET;
saddr.sin_port = htons(9999);
int bind_ret = bind(server_listen_fd, (sockaddr *)&saddr, sizeof(saddr));
if (bind_ret) {
perror("bind");
exit(-1);
}
int listen_ret = listen(server_listen_fd, 8);
if (listen_ret == -1) {
perror("listen");
exit(-1);
}
sockaddr_in caddr;
socklen_t client_len = (socklen_t)sizeof(caddr);
int client_fd = accept(server_listen_fd, (sockaddr *)&caddr, &client_len);
if (client_fd == -1) {
perror("accept");
exit(-1);
}
char client_ip[16];
inet_ntop(AF_INET, &caddr.sin_addr.s_addr, client_ip, sizeof(client_ip));
unsigned short client_port = ntohs(caddr.sin_port);
printf("client ip is:%s, client port is:%d\n", client_ip, client_port);
char recvBuf[1024] = {
0};
while (1) {
int read_ret = read(client_fd, recvBuf, sizeof(recvBuf));
if (read_ret == -1) {
perror("read");
exit(-1);
} else if (read_ret > 0) {
printf("recv client data is %s\n", recvBuf);
} else if (read_ret == 0) {
cout << "server closed..." << endl;
break;
}
const char * data = "hello, I am server";
int write_ret = write(client_fd, data, strlen(data));
}
close(client_fd);
close(server_listen_fd);
return 0;
}
②TCP communication (client)
#include <iostream>
#include <unistd.h>
#include <arpa/inet.h>
#include <cstring>
using namespace std;
int main()
{
int client_fd = socket(AF_INET, SOCK_STREAM, 0);
if (client_fd == -1) {
perror("socket");
exit(-1);
}
sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
int pton_ret = inet_pton(AF_INET, "192.168.246.130", &server_addr.sin_addr.s_addr);
server_addr.sin_port = htons(9999);
int cone_ret = connect(client_fd, (sockaddr *)&server_addr, sizeof(server_addr));
if (cone_ret == -1) {
perror("connect");
exit(-1);
}
char recvBuf[1024] = {
0};
while (1) {
const char * data = "hello, I am client";
write(client_fd, data, strlen(data));
sleep(1);
int read_ret = read(client_fd, recvBuf, sizeof(recvBuf));
if (read_ret == -1) {
perror("read");
exit(-1);
} else if (read_ret > 0) {
printf("recv client data is %s\n", recvBuf);
} else if (read_ret == 0){
cout << "server closed..." << endl;
break;
}
}
close(client_fd);
return 0;
}