35,UC(14) .

来源:互联网 发布:淘宝手机充值代理加盟 编辑:程序博客网 时间:2024/04/30 04:14

/*
 达内学习 
*/
回顾:
 信号量集: semaphore arrays
 1 key = ftok(); 2 semid = semget()
 3 semctl(semid ,0,SEMTVAL,10); 信号量集就可以使用了
 4 semop() 实现 +1,—1
 5 semctl() 删除 计数器组层的数组
 网络编程(socket编程)
 服务端:
 1 socket() ->sockfd
 2 准备通信地址 sockaddr sockaddr_un sockaddr_in
 3 绑定 bind()
 4 读写sockfd 实现信息交互
 5 close(sockfd);
 客户端:
 第三步connect()函数,用法和bind()没有区别  其他一样
今天:
 socket本地通信,实用性不如消息队列
 socket网络通信和本地通信差不多,地址不同
 网络通信时,端口和IP地址需要使用转换函数
 端口转换函数: htons() 本地转网络(short) ; IP地址转换函数:int inet_addr(char*) 点分十进制转 十六进制

一对多通信:
 TCP的 一对多通信
 服务端:
 1 socket()得到socket 描述符,参数tpye 必须用SOCK_STREAM
 2 准备通讯地址,端口和IP需要转换函数 hotns inet_addr (char* )
 3 绑定 bind() 
 4 用listen()函数,监听客户端
 5 用accept()函数,等待客户端的链接,如果没有链接,阻塞,如果有客户端链接,返回一个新的socket描述符,用于读写数据
 6 读写数据read()/write()
 7 关闭对应的socket  
 客户端 一一对一的完全一样
 绑定之前加上代码
 int reuse = 1; setsockopt(sockfd, SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse));
练习:实现客户端加上输入(scanf),要求能多次输入,输入bye 退出 客户端输入一句发送给服务器一句
  服务器能多次接受同一客户端的数据,并且把客户端发送来的数据发回给客户端
  思路:while(1) {数据交互,遇到bye break;}
  清空buf  memset(char*,int num,size_t len); //字符串,清成的数字,清多少
如何提高编写代码的能力

1 尽量实现:不看任何代码 写出当天的代码
2 在当天的代码上能自由的分段(功能模块)
3 找一些能实现的课外代码(新的)

TCP编程的经验
1 固定的套路 ,服务器7步,客户端5步
2 服务器停在accept(),直到有客户端连接
3 服务器和客户端要同时考虑

UDP编程
TCP 和UDP 协议的区别
TCP 是有连接协议,在客户端和服务端通信过程中,一直保持链接,数据交互以数据流的方式进行,(SOCK_STREAM)可以重发一切错误数据。
UDP 是无连接协议,在客户端和服务器通信过程中不保持链接,数据交互以数据报的方式(SOCK_DGRAM)进行,不会重发任何错误数据。
UDP效率比较高,但是不保证数据的完整和正确
TCP效率低,但是可以保证数据的完整和正确

UDP的发送和接受有特定函数
sendto() /recvfrom()  int size = recvfrom(sockfd,buf,100,0,(structsockaddr*)&from,&len);
sendto(sockfd,"hello",5,0,(struct sockaddr*)&addr,sizeof(addr));

原创粉丝点击