c语言怎么自动回消息,C语言实现最基本的回射服务器与客户端(服务器用TCP协议回射客户发来的消息)...

话不多说,直接上干货,下面两个程序都是linux程序。

server.c完整代码:

#include

#include

#include

#include

#include

#include

#include

#include

int main(int argc, char* argv[], char* envp[])

{

char buf[1024] = {‘\0‘};

int listenfd, new;

struct sockaddr_in servaddr;

struct sockaddr_in peeraddr;

socklen_t peerlen = sizeof(peeraddr);

memset(&servaddr, 0, sizeof(servaddr));

if ((listenfd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)

{

printf("listenfd fail! \n");

return 1;

}

servaddr.sin_family = AF_INET;

servaddr.sin_port = htons(5188);

servaddr.sin_addr.s_addr = htonl(INADDR_ANY);

if ((bind(listenfd, (struct sockaddr*)&servaddr, sizeof(servaddr))) < 0)

{

printf("bind fail! \n");

return 2;

}

if ((listen(listenfd, SOMAXCONN)) < 0)

{

printf("listen fail! \n");

return 3;

}

if ((new = accept(listenfd, (struct sockaddr*)&peeraddr, &peerlen)) < 0)

{

printf("accept fail! new: %d\n", new);

return 4;

}

while (1)

{

memset(buf, 0, sizeof(buf));

read(new, buf, sizeof(buf));

fputs(buf, stdout);

write(new, buf, strlen(buf));

}

close(new);

close(listenfd);

return 0;

}

client.c完整代码:

#include

#include

#include

#include

#include

#include

int main(int argc, char* argv[], char* envp[])

{

char buf[1024] = {‘\0‘};

char bufa[1024] = {‘\0‘};

int sock;

struct sockaddr_in servaddr;

memset(&servaddr, 0, sizeof(servaddr));

servaddr.sin_family = AF_INET;

servaddr.sin_port = htons(5188);

servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");

if ((sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)

printf("socket fail! \n");

if (connect(sock, (struct sockaddr*)&servaddr, sizeof(servaddr)) < 0)

printf("connect fail! \n");

while (fgets(buf, sizeof(buf), stdin))

{

memset(&bufa, 0, sizeof(bufa));

write(sock, buf, sizeof(buf));

read(sock, bufa, sizeof(bufa));

fputs(bufa, stdout);

}

close(sock);

return 0;

}

原文:http://www.cnblogs.com/xjjsk/p/5452186.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 答1: 对于用C语言实现TCP客户端和服务端,要求是服务器可以同时连接多个客户端,并能够打印多个客户端发来消息,可以使用socket编程的方式来实现。首先,在服务器端,使用socket()函数创建一个TCP socket,并使用bind()函数将其绑定到指定的端口号。然后,使用listen()函数将socket处于监听状态,以等待客户端的连接。一旦客户端连接到服务器服务器就可以使用accept()函数接受客户端的连接,然后使用read()函数从客户端接收消息,并使用write()函数将消息发送客户端。最后,服务器可以使用close()函数关闭与客户端的连接。 ### 答2: 实现C语言编写TCP协议客户端服务器端的实例,并能同时处理多个客户端连接并打印客户端发来消息,需要以下步骤: 1. 导入相关头文件和库函数:在C语言中,可以使用sys/socket.h头文件和socket函数库来实现TCP协议客户端服务器端编程。 2. 创建一个服务器端的套接字:使用socket函数创建一个服务器端的套接字,指定使用TCP协议。 3. 绑定服务器地址和端口号:使用bind函数将服务器地址和端口号与套接字绑定在一起。 4. 监听客户端的连接请求:使用listen函数监听来自客户端的连接请求。 5. 接受客户端连接:使用accept函数接受客户端的连接请求,并创建与客户端通信的套接字。 6. 创建多线程或多进程:可以使用多线程或多进程来实现同时处理多个客户端连接的功能。 7. 打印客户端发来消息:使用recv函数接收客户端发来消息,并打印出来。 8. 处理客户端连接断开:当客户端连接断开时,需要使用close函数关闭对应的套接字。 需要注意的是,在多客户端连接情况下,服务器端需要具备处理并发请求的能力,可以使用线程池或进程池等方式来实现。 以上是一个简单的实现方法,你可以根据具体需求进行修改和优化。 ### 答3: 使用C语言实现TCP实现客户端和服务端是一种常见的网络编程任务。下面是一个简单的例子: 首先,服务端的代码如下所示: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <arpa/inet.h> #define PORT 8888 #define MAX_CLIENTS 5 int main() { int server_fd, new_socket, valread; struct sockaddr_in address; int addrlen = sizeof(address); char buffer[1024]; // 创建套接字 if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) { perror("socket failed"); exit(EXIT_FAILURE); } // 设置服务器地址和端口 address.sin_family = AF_INET; address.sin_addr.s_addr = INADDR_ANY; address.sin_port = htons(PORT); // 绑定套接字到指定地址和端口 if (bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0) { perror("bind failed"); exit(EXIT_FAILURE); } // 监听连接 if (listen(server_fd, MAX_CLIENTS) < 0) { perror("listen failed"); exit(EXIT_FAILURE); } printf("Server listening on port %d\n", PORT); while (1) { // 接受新连接 if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen)) < 0) { perror("accept failed"); exit(EXIT_FAILURE); } printf("New client connected\n"); // 读取客户端发来消息 while ((valread = read(new_socket, buffer, 1024)) > 0) { printf("Client message: %s\n", buffer); memset(buffer, 0, sizeof(buffer)); } printf("Client disconnected\n"); // 关闭连接 close(new_socket); } return 0; } 然后,客户端的代码如下: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <arpa/inet.h> #define SERVER_IP "127.0.0.1" #define PORT 8888 int main() { int sock = 0; struct sockaddr_in serv_addr; char message[1024]; // 创建套接字 if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) { perror("socket failed"); exit(EXIT_FAILURE); } serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(PORT); // 将IP地址字符串转换为二进制形式 if (inet_pton(AF_INET, SERVER_IP, &serv_addr.sin_addr) <= 0) { perror("address conversion failed"); exit(EXIT_FAILURE); } // 连接到服务器 if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) { perror("connection failed"); exit(EXIT_FAILURE); } // 输入消息 printf("Enter message: "); fgets(message, sizeof(message), stdin); // 发送消息服务器 if (send(sock, message, strlen(message), 0) < 0) { perror("send failed"); exit(EXIT_FAILURE); } printf("Message sent\n"); // 关闭连接 close(sock); return 0; } 这样就实现了一个简单的可以同时连接多个客户端并打印客户端消息TCP服务端和客户端
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值