帮我写一个c语言的tcp接口库
时间: 2023-12-25 09:05:39 浏览: 25
好的,下面是一个简单的 TCP 接口库的代码示例,它可以用于在 C 语言中进行 TCP 套接字编程:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#define MAX_BUFFER_SIZE 1024
#define DEFAULT_PORT 8080
int tcp_open_socket(const char *server, int port) {
int sockfd;
struct sockaddr_in serv_addr;
struct hostent *host;
host = gethostbyname(server);
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
perror("socket creation failed");
exit(EXIT_FAILURE);
}
memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(port);
serv_addr.sin_addr = *((struct in_addr *)host->h_addr);
if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {
perror("connection failed");
exit(EXIT_FAILURE);
}
return sockfd;
}
void tcp_close_socket(int sockfd) {
close(sockfd);
}
void tcp_send(int sockfd, const char *buffer, int length) {
int n = write(sockfd, buffer, length);
if (n < 0) {
perror("writing to socket failed");
exit(EXIT_FAILURE);
}
}
int tcp_receive(int sockfd, char *buffer) {
int n = read(sockfd, buffer, MAX_BUFFER_SIZE);
if (n < 0) {
perror("reading from socket failed");
exit(EXIT_FAILURE);
}
return n;
}
int main(int argc, char *argv[]) {
int sockfd;
char buffer[MAX_BUFFER_SIZE];
if (argc < 2) {
fprintf(stderr, "Usage: %s ip_address [port]\n", argv[0]);
exit(EXIT_FAILURE);
}
int port = DEFAULT_PORT;
if (argc == 3) {
port = atoi(argv[2]);
}
sockfd = tcp_open_socket(argv[1], port);
printf("Connected to server\n");
while (1) {
printf("Enter message to send: ");
fgets(buffer, MAX_BUFFER_SIZE, stdin);
tcp_send(sockfd, buffer, strlen(buffer));
int n = tcp_receive(sockfd, buffer);
buffer[n] = '\0';
printf("Received message: %s\n", buffer);
}
tcp_close_socket(sockfd);
return 0;
}
```
上面的代码实现了一个简单的 TCP 客户端,它通过 `tcp_open_socket()` 函数与指定的服务器建立连接,通过 `tcp_send()` 函数发送消息,通过 `tcp_receive()` 函数接收消息,并通过 `tcp_close_socket()` 函数关闭连接。
你可以使用该代码作为起点,根据需要进行修改和扩展,以满足实际的需求。