详细解释1,2并给出具体实现代码
时间: 2024-02-12 08:06:20 浏览: 110
1. 建立TCP服务器
建立TCP服务器的基本步骤如下:
1. 使用socket函数创建一个socket,指定使用TCP协议;
2. 使用bind函数将socket绑定到一个IP地址和端口号上;
3. 使用listen函数开始监听客户端的连接请求;
4. 使用accept函数接受客户端的连接请求,并返回一个新的socket描述符,可以使用它进行数据的收发。
具体实现代码如下:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
int listenfd, connfd;
struct sockaddr_in addr;
char buffer[1024];
// 创建socket
if ((listenfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
perror("socket");
exit(EXIT_FAILURE);
}
// 设置地址和端口
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(8888);
addr.sin_addr.s_addr = INADDR_ANY;
// 绑定socket
if (bind(listenfd, (struct sockaddr *)&addr, sizeof(addr)) == -1) {
perror("bind");
exit(EXIT_FAILURE);
}
// 开始监听
if (listen(listenfd, 10) == -1) {
perror("listen");
exit(EXIT_FAILURE);
}
printf("Server is listening on port %d...\n", ntohs(addr.sin_port));
// 接受客户端连接
if ((connfd = accept(listenfd, (struct sockaddr *)NULL, NULL)) == -1) {
perror("accept");
exit(EXIT_FAILURE);
}
printf("Client is connected.\n");
// 接收数据
int n = recv(connfd, buffer, sizeof(buffer), 0);
if (n < 0) {
perror("recv");
exit(EXIT_FAILURE);
}
// 处理数据
printf("Received message: %s\n", buffer);
// 关闭连接
close(connfd);
close(listenfd);
return 0;
}
```
2. 编写TCP客户端
编写TCP客户端的基本步骤如下:
1. 使用socket函数创建一个socket,指定使用TCP协议;
2. 使用connect函数连接到服务器端;
3. 使用send函数向服务器发送数据,使用recv函数接受服务器返回的数据。
具体实现代码如下:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
int sockfd;
struct sockaddr_in addr;
char buffer[1024];
// 创建socket
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
perror("socket");
exit(EXIT_FAILURE);
}
// 设置地址和端口
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(8888);
addr.sin_addr.s_addr = inet_addr("127.0.0.1");
// 连接服务器
if (connect(sockfd, (struct sockaddr *)&addr, sizeof(addr)) == -1) {
perror("connect");
exit(EXIT_FAILURE);
}
printf("Connected to server.\n");
// 发送数据
strcpy(buffer, "Hello, world!");
if (send(sockfd, buffer, strlen(buffer), 0) == -1) {
perror("send");
exit(EXIT_FAILURE);
}
// 关闭连接
close(sockfd);
return 0;
}
```
阅读全文