Untitled
unknown
plain_text
2 years ago
2.0 kB
11
Indexable
#include "tcp_client.h"
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <iostream>
#include <cstring>
const char* host = "127.0.0.1";
int port = 7000;
int getSockfd()
{
static int sock_fd = start_client();
return sock_fd;
}
//啟動並連接到伺服器
int start_client()
{
int sock_fd; //sock_fd 是客戶端的套接字描述符
sockaddr_in serv_name; //sockaddr_in serv_name 存儲伺服器的地址資訊。
int status;
char indata[1024] = {0}, outdata[1024] = {0};
// create a socket
sock_fd = socket(AF_INET, SOCK_STREAM, 0); //socket 函數用來創建一個新的套接字。 AF-INET -> IPv4, SOCK_STEAM-> TCP protocol
if (sock_fd == -1) {
perror("Socket creation error");
exit(1);
}
// server address
serv_name.sin_family = AF_INET;
inet_aton(host, &serv_name.sin_addr); //inet_aton將字符串格式的IP地址(例如"127.0.0.1")轉換為二進制格式。
serv_name.sin_port = htons(port); // htons將主機字節序的端口號轉換為網絡字節序
//connect 函數用來連接到伺服器。伺服器的 IP 地址和端口號被硬編碼為 "127.0.0.1" 和 7000。
status = connect(sock_fd, reinterpret_cast<struct sockaddr *>(&serv_name), sizeof(serv_name));
if (status == -1) {
perror("Connection error");
exit(1);
}
//若成功,該函數返回套接字描述符,用於之後的通信。
return sock_fd;
}
//此函數用來向已連接的伺服器發送數據。
int send_data(int sock_fd, const char *data)
{
return send(sock_fd, data, strlen(data), 0);
}
//此函數用來從已連接的伺服器接收數據。
int receive_data(int sock_fd, char *buffer, int buffer_size)
{
return recv(sock_fd, buffer, buffer_size, 0);
}
//此函數用來關閉與伺服器的連接。
void closed(int sock_fd)
{
close(sock_fd);
}Editor is loading...