废话不多说直接上干货
1.目标
在Ubuntu server下 利用vim编程 gcc编译 创建回声服务器
2.作用
接受客户端信息
并将所有小写转换为大写
并返回给客户端
3.测试
本demo中客户端可以采用window下(也可在Linux下使用)的cmd中使用telnet IP 端口 连接服务器 并测试demo 若链接不成功可点此链接
注:对代码有疑惑可添加好友2552978153共同讨论
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<string.h>
#include<ctype.h>
#include<arpa/inet.h>
#define SERVER_PORT 666
int main()
{
int sock;//信箱
int i;
struct sockaddr_in server_addr;
sock = socket(AF_INET, SOCK_STREAM, 0);//创建信箱
bzero(&server_addr,sizeof(server_addr));//清空标签
server_addr.sin_family=AF_INET;//选择协议族
server_addr.sin_addr.s_addr=htonl(INADDR_ANY);//监听本地所有IP
server_addr.sin_port=htons(SERVER_PORT);//绑定端口号
bind(sock,(struct sockaddr *)&server_addr,sizeof(server_addr));//绑定IP和端口
listen(sock,128);//监听客户端
printf("等待客户端的连接\n");
int done=1;
while(done){
struct sockaddr_in client;
int client_sock, len;
char client_ip[64];//用来存客户端IP和端口 打印
char buf[256];//用来接客户端的数据
socklen_t client_addr_len;
client_addr_len = sizeof(client);
client_sock = accept(sock, (struct sockaddr*)&client, &client_addr_len);
printf("client ip:%s\t port:%d\n",
inet_ntop(AF_INET,&client.sin_addr.s_addr,client_ip,sizeof(client_ip)),
ntohs(client.sin_port));
//读取数据
len = read(client_sock, buf, sizeof(buf)-1);//减1防止越界
buf[len] = '\0';
printf("receive[%d]:%s\n", len, buf);
/* for(i=0;i<len;i++){
if(buf[i]>='a'&& buf[i]<='z'){
buf[i]=buf[i]-32;//小写转换为大写
}
}
*/
for(i=0;i<len;i++){
buf[i]=toupper(buf[i]);//小写转换为大写 调用函数实现
}
len = write(client_sock, buf, len);//write 就相当于send 发送数据
printf("write finished. len:%d\n", len);
close(client_sock);
}
return 0;
}
测试结果:
上图