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));
- 35,UC(14) .
- UC
- UC
- uc第14天socket通信
- UC NO
- UC笑话
- UC介绍
- UC矩阵
- UC浏览器
- UC编程
- 匆贩雅撂痛炊涝睾锌勇傺没祷uc
- UC面试
- UC browser
- UC Browser
- UC Browser
- uC/OS
- UC-day01
- UC 1
- android控件可以拖动处理方法
- Android——界面特效 相关知识总结贴
- Win32多线程之进程
- 去掉字符串中的空格
- thread_cleanup
- 35,UC(14) .
- SQL SERVER 2005禁用 VIA协议为哪般?
- 音乐播放器
- OCP-1Z0-051-V9.02-36题
- mysql数据库优化技巧
- 36,UC(15)
- 数据库事务四个特性
- C++解括号匹配问题
- 音乐播放器状态生命周期