用C程序设计语言编程完成从客户端输入一行字符,发送到服务器后,由服务器转化成大写字母,回送到客户端并显示
时间: 2023-05-30 21:01:33 浏览: 77
以下是用C语言编写的客户端和服务器端程序,实现从客户端输入一行字符,服务器将其转化为大写字母并回送到客户端并显示。
客户端程序:
```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>
#include <unistd.h>
#define MAXLINE 1024
int main(int argc, char **argv) {
int sockfd;
struct sockaddr_in servaddr;
char sendline[MAXLINE], recvline[MAXLINE];
if (argc != 2) {
printf("Usage: %s <IP address>\n", argv[0]);
exit(1);
}
// 创建套接字
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
perror("socket error");
exit(1);
}
// 设置服务器地址
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(9999);
if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0) {
printf("inet_pton error: %s\n", argv[1]);
exit(1);
}
// 连接服务器
if (connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0) {
perror("connect error");
exit(1);
}
printf("Please enter a string: ");
fgets(sendline, MAXLINE, stdin);
// 发送数据
write(sockfd, sendline, strlen(sendline));
// 接收数据
read(sockfd, recvline, MAXLINE);
printf("Received from server: %s", recvline);
close(sockfd);
exit(0);
}
```
服务器端程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <ctype.h>
#define MAXLINE 1024
int main(int argc, char **argv) {
int listenfd, connfd;
struct sockaddr_in servaddr, cliaddr;
socklen_t cliaddr_len;
char buf[MAXLINE];
char str[INET_ADDRSTRLEN];
int i, n;
// 创建套接字
if ((listenfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
perror("socket error");
exit(1);
}
// 设置服务器地址
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(9999);
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
// 绑定套接字
if (bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) == -1) {
perror("bind error");
exit(1);
}
// 监听套接字
if (listen(listenfd, 5) == -1) {
perror("listen error");
exit(1);
}
printf("Server is running...\n");
while (1) {
cliaddr_len = sizeof(cliaddr);
// 接受连接请求
if ((connfd = accept(listenfd, (struct sockaddr *)&cliaddr, &cliaddr_len)) == -1) {
perror("accept error");
continue;
}
// 打印客户端地址信息
printf("connection from %s, port %d\n", inet_ntop(AF_INET, &cliaddr.sin_addr, str, sizeof(str)), ntohs(cliaddr.sin_port));
// 读取客户端发送的数据
while ((n = read(connfd, buf, MAXLINE)) > 0) {
// 转换为大写字母
for (i = 0; i < n; i++) {
buf[i] = toupper(buf[i]);
}
// 发送数据
write(connfd, buf, n);
}
// 关闭连接
close(connfd);
}
exit(0);
}
```
阅读全文