linux中socket编程实现一端可循环向另一端传送字符串
时间: 2024-03-22 09:41:29 浏览: 60
好的,我可以帮你解答这个问题。
在Linux中进行Socket编程,需要使用Socket API,其中最常用的是TCP/IP协议。
以下是一个简单的示例程序,可以实现一端循环向另一端传送字符串:
服务端代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define PORT 8888
#define MAXLINE 1024
int main() {
int listenfd, connfd;
struct sockaddr_in servaddr;
char buff[MAXLINE];
time_t ticks;
listenfd = socket(AF_INET, SOCK_STREAM, 0);
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(PORT);
bind(listenfd, (struct sockaddr *) &servaddr, sizeof(servaddr));
listen(listenfd, 10);
while (1) {
connfd = accept(listenfd, (struct sockaddr *) NULL, NULL);
while (1) {
bzero(buff, sizeof(buff));
fgets(buff, MAXLINE, stdin);
write(connfd, buff, strlen(buff));
bzero(buff, sizeof(buff));
read(connfd, buff, sizeof(buff));
printf("String received from client: %s", buff);
}
close(connfd);
}
}
```
客户端代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define PORT 8888
#define MAXLINE 1024
int main(int argc, char **argv) {
int sockfd, n;
char recvline[MAXLINE + 1];
struct sockaddr_in servaddr;
if (argc != 2) {
printf("usage: a.out <IP address>");
exit(1);
}
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
printf("socket error");
exit(1);
}
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(PORT);
if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0) {
printf("inet_pton error for %s", argv[1]);
exit(1);
}
if (connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0) {
printf("connect error");
exit(1);
}
while (1) {
bzero(recvline, MAXLINE);
if (read(sockfd, recvline, MAXLINE) == 0) {
printf("The server terminated prematurely");
exit(1);
}
printf("%s", recvline);
bzero(recvline, MAXLINE);
fgets(recvline, MAXLINE, stdin);
write(sockfd, recvline, strlen(recvline));
}
exit(0);
}
```
在这个示例中,服务端会一直监听客户端的连接请求,并可以接收客户端传来的字符串,然后把接收到的字符串打印出来。而客户端可以循环地向服务端发送字符串。
当你运行这个程序时,客户端会提示你输入一个字符串,然后把这个字符串发送给服务端。服务端会接收到这个字符串,并把它打印出来。然后服务端会提示你输入一个字符串,你可以输入任何字符串,然后它会把你输入的字符串发送给客户端。客户端会接收到这个字符串,并把它打印出来。这个过程会一直循环下去。
希望这个示例程序对你有帮助。
阅读全文