简单的说就是即从客户端收到什么数据,就发送什么数据回去
**前提须知**:read读取不到信息会阻塞等待!
**执行过程**: 1 -》2-》5-》6-》3-》4
/* 客服端部分 */
1 scanf("%s",wbuf);//等待键盘输入
2 write(sfd,wbuf,strlen(wbuf));//写入服务器
3 read(sfd,rbuf,sizeof(rbuf));//等待客服端写会
4 printf("%s\n",rbuf);//打印内容
----------------------分割线------------------------------
/*服务器部分*/
5 read(confd,buf,sizeof(buf)); //阻塞等待
6 write(confd,buf,len); //写会客服端
(1)首先客服端与服务器建立连接
(2)客服端等待键盘输入(scanf 或者 fget)
(3)如果此时键盘输入回车确认 客服端write写入服务器 服务器read读到了信息
(4)服务器再将read读到的信息write写回客服端 客服端read接受到信息并打印
#include
#include
#include
#include
#include
#include
#include
#include
int main(void)
{
int sockfd,confd;
char ipstr[128];
int size;
char buf[1024];
int i;
int len;
//两个结构体 一个用于绑定身份到套接字 一个用于接收客服端的结构体
struct sockaddr_in serveraddr,clientaddr;
//1.创建监听套接字
sockfd = socket(AF_INET,SOCK_STREAM,0);
//2.bind(通信需要套接字 我把我家的地址 门牌号绑上去 ip和端口)
bzero(&serveraddr,sizeof(serveraddr)); //类似memset 清空结构体
//地址族协议,选择IPV4
serveraddr.sin_family = AF_INET; //属于ipv4还是ipv6
//IP地址 本机任意可用ip地址
serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);
serveraddr.sin_port = htons(8002);//端口号
bind(sockfd,(struct sockaddr *)&serveraddr,sizeof(serveraddr));
//3.监听 128为服务器连接的总和
listen(sockfd,128);
size = sizeof(clientaddr);
//4.accept 阻塞监听 客服端链接的请求
//参数二结构体的转换
confd = accept(sockfd,(struct sockaddr *)&clientaddr,&size);
//输出客服端的ip和端口
printf("client ip%s ,port %d\n",inet_ntop(AF_INET,&clientaddr.sin_addr.s_addr,ipstr,sizeof(ipstr)),
ntohs(clientaddr.sin_port));
//5.处理客户端请求
//读和谐
while(1)
{
len=read(confd,buf,sizeof(buf)); //接受不到 阻塞等待
#if 0 //if 0 endif 之间的大小写转换代码已经屏蔽
i=0;
while(i<len)
{
buf[i]=toupper(buf[i]);//小写转大写的操作
i++;
}
#endif
write(confd,buf,len);
memset(buf,0,1024);
}
close(confd);
close(sockfd);
return 0;
}
#include
#include
#include
#include
#include
#include
#include
#include
int main(int argc,char* argv[])
{
int sfd;
struct sockaddr_in sfdaddr; //指定要连接服务器的结构体 ip 端口
int len;
//char buf[1024];
char wbuf[1024];
char rbuf[1024];
//1.socket 通信用套接字,创建一个socket
sfd = socket(AF_INET,SOCK_STREAM,0);
char ipstr[] = "127.0.0.1"; //或者本机测试ip
//char ipstr[] = "192.168.3.106"; //要连上的ip地址
//初始化地址
bzero(&sfdaddr,sizeof(sfdaddr));
sfdaddr.sin_family = AF_INET;
sfdaddr.sin_port = htons(8002);
inet_pton(AF_INET,ipstr,&sfdaddr.sin_addr.s_addr); //转换ip 保存到结构体内
//2.connect 主动连接服务器 sfd返回客服端的套接字(文件描述符)
connect(sfd,(struct sockaddr *)&sfdaddr,sizeof(sfdaddr));
//3.读写
while(1)
{
memset(wbuf,0,1024);
memset(rbuf,0,1024);
scanf("%s",wbuf);
write(sfd,wbuf,strlen(wbuf));
len=read(sfd,rbuf,sizeof(rbuf));
//write(STDOUT_FILENO,buf,len);
printf("%s\n",rbuf);
}
//4.close
close(sfd);
return 0;
}