C/C++语言 TCP套接字实现小写转换成大写
时间: 2023-11-16 13:06:51 浏览: 110
TCP大小写转换
好的,下面是一个简单的TCP服务器程序,可以将从客户端发送过来的小写字符串转换成大写字符串并返回给客户端。
```c++
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#define BUF_SIZE 1024
void error_handling(const char* message);
int main(int argc, char* argv[])
{
int serv_sock, clnt_sock;
struct sockaddr_in serv_addr, clnt_addr;
socklen_t clnt_addr_size;
char message[BUF_SIZE];
int str_len, i;
if(argc != 2)
{
printf("Usage: %s <port>\n", argv[0]);
exit(1);
}
// 创建TCP socket对象
serv_sock = socket(PF_INET, SOCK_STREAM, 0);
if(serv_sock == -1)
error_handling("socket() error");
// 绑定IP地址和端口号
memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
serv_addr.sin_port = htons(atoi(argv[1]));
if(bind(serv_sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) == -1)
error_handling("bind() error");
// 设置监听队列,最大连接数为1
if(listen(serv_sock, 1) == -1)
error_handling("listen() error");
printf("服务器已启动,等待客户端连接...\n");
while(1)
{
// 等待客户端连接
clnt_addr_size = sizeof(clnt_addr);
clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_addr, &clnt_addr_size);
if(clnt_sock == -1)
error_handling("accept() error");
printf("客户端已连接,客户端地址:%s:%d\n", inet_ntoa(clnt_addr.sin_addr), ntohs(clnt_addr.sin_port));
while((str_len = read(clnt_sock, message, BUF_SIZE)) != 0)
{
// 将小写字符串转换成大写字符串
for(i = 0; i < str_len; i++)
message[i] = toupper(message[i]);
// 发送大写字符串给客户端
write(clnt_sock, message, str_len);
}
// 关闭客户端socket连接
close(clnt_sock);
printf("客户端已断开连接\n");
}
// 关闭服务器socket连接
close(serv_sock);
return 0;
}
void error_handling(const char* message)
{
perror(message);
exit(1);
}
```
客户端程序可以使用telnet命令进行测试,如下所示:
```
$ telnet 127.0.0.1 8888
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
hello, world!
HELLO, WORLD!
Connection closed by foreign host.
```
当客户端连接到服务器后,发送字符串"hello, world!",服务器会将其转换成大写字符串"HELLO, WORLD!"并返回给客户端,最后关闭连接。
阅读全文