网络编程-----服务器的实现

案例要求

实现一个服务器的连接,要求将客户端的小写转化为大写

声明:因个人能力有限,本文仅是个人的学习记录笔记,有错误之处还望指出

服务器实现流程

  1. 建立套接字                   —>socket
  2. 绑定套接字,并且初始化套接字结构体 —>bind
  3. 设置连接上限                   —>listen
  4. 阻塞等待链接                   —>accept
  5. 读取客户端套接字的数据           —>read
  6. 处理数据                       —>toupper
  7. 将数据修改                     —>write

注意事项
1.在利用nc测试导通的时候应该使用127.0.0.1(用此回送地址来测试)
2.bind,connect,accept函数要将sockaddr_in强制转化成socket sockaddr* 格式
3.利用toupper来将字符转化
4.在绑定套接字的时候要注意网络字节序(小端—>大端)

代码实现

#include <sys/types.h>
#include <unistd.h>
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <sys/socket.h>

//端口号
#define SERV_PORT 8888
//ip
#define SERV_IP "127.0.0.1"
//最多连接数
#define MAX_LOG 20

//错误判断
void sys_err(char err[128]){
	printf("%s",err);
}

int main(){

	//定义ip的保存大小
	unsigned char ip_buf[sizeof(struct in_addr)];
	//定义socket文件描述符
	int cfd , sfd;
	int i,n;
	char buf[BUFSIZ];
	socklen_t client_addr_len;
	//创建套接字
	sfd = socket(AF_INET,SOCK_STREAM,0);//IPV4 TCP格式
	if( sfd == -1)
		sys_err("socket");
	//绑定套接字
	struct sockaddr_in serv_addr,client_addr;//定义结构体(用于指定模式,IP,端口号)
	serv_addr.sin_family = AF_INET;
	serv_addr.sin_port = htons(SERV_PORT);//端口网络字节序变化
	 inet_pton(AF_INET,SERV_IP,ip_buf); //ip为字符串类型要先变为整形再便序
	
	//serv_addr.sin_family = htonl(INADDR_ANY);//操作系统随机分配 
	

	if(bind(sfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr)) == -1)
		sys_err("bind");
	
	//设置最多链接上限
		if(listen(sfd,MAX_LOG) == -1)
		sys_err("listen");

	//阻塞等待连接
	client_addr_len = sizeof(client_addr);
	cfd = accept(sfd,(struct sockaddr *)&client_addr,&client_addr_len);
	if(cfd == -1)
		sys_err("accept");

	//循环处理数据
	while(1){

	n = read(cfd,buf,sizeof(buf));
	
	//遍历所有数据小写变大写
	for( i = 0 ;i < n;i++){
		buf[i] = toupper(buf[i]);
	}
	write(cfd,buf,n);
	}
	close(cfd);
	close(sfd);
	return 0;
}









结果图

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值