python,import socket,,def start_server(host='127.0.0.1', port=8080):, with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:, s.bind((host, port)), s.listen(), print(f"Server started at {host}:{port}"), conn, addr = s.accept(), with conn:, print(f"Connected by {addr}"), while True:, data = conn.recv(1024), if not data:, break, conn.sendall(data),,start_server(),
“
在构建一个基本的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> void error(const char *msg) { perror(msg); exit(1); } int main(int argc, char *argv[]) { int sockfd, newsockfd, portno; socklen_t clilen; char buffer[256]; struct sockaddr_in serv_addr, cli_addr; int n; if (argc < 2) { fprintf(stderr,"ERROR, no port provided "); exit(1); } sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) error("ERROR opening socket"); bzero((char *) &serv_addr, sizeof(serv_addr)); portno = atoi(argv[1]); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = INADDR_ANY; serv_addr.sin_port = htons(portno); if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) error("ERROR on binding"); listen(sockfd,5); clilen = sizeof(cli_addr); newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen); if (newsockfd < 0) error("ERROR on accept"); bzero(buffer,256); n = read(newsockfd,buffer,255); if (n < 0) error("ERROR reading from socket"); printf("Here is the message: %s ",buffer); n = write(newsockfd,buffer,strlen(buffer)); if (n < 0) error("ERROR writing to socket"); close(newsockfd); close(sockfd); return 0; }
1、创建套接字:socket(AF_INET, SOCK_STREAM, 0)
创建一个IPv4的TCP套接字。
2、绑定地址和端口:通过bind()
函数将套接字与指定的地址和端口绑定。
3、监听连接:使用listen()
函数使套接字进入被动监听状态,等待客户端的连接请求。
4、接受连接:accept()
函数用于接受客户端的连接请求,返回一个新的套接字描述符用于与客户端通信。
5、读取数据:通过read()
函数从套接字中读取数据到缓冲区。
6、发送数据:使用write()
函数将数据写回到客户端。
7、关闭套接字:通信完成后,通过close()
函数关闭套接字。
Q1: 如何更改服务器监听的端口?
A1: 你可以通过修改命令行参数来更改服务器监听的端口,如果你希望服务器监听8080端口,可以在运行程序时传递参数./server 8080
。
Q2: 如果客户端发送的数据超过256字节怎么办?
A2: 当前代码只处理最多256字节的数据,如果需要处理更大的数据量,可以考虑使用循环读取或动态分配更大的缓冲区,还可以考虑使用更复杂的协议来管理数据传输。