linux网络编程
来源:互联网 发布:防御阵型中文版mac 编辑:程序博客网 时间:2024/06/06 01:44
TCP/IP封包格式
网络层(IP层:是一种不可靠的尽力传输)
TCP头:
tcp是一种可靠传输: 通过确认和重发机制实现可靠传输
TCP的三次和四次握手:
注意:
三次握手和四次握手要求笔试的时候能直接画出来
要点:
1.要标注客户端和服务器
2.三次握手一定是客户端先发起(另外, 四次握手可以客户端和服务器任意一个先发起)
3.要标注SYN/ACK, FIN/ACK的工作原理
1.要标注客户端和服务器
2.三次握手一定是客户端先发起(另外, 四次握手可以客户端和服务器任意一个先发起)
3.要标注SYN/ACK, FIN/ACK的工作原理
带外数据(紧急数据)的发送接收:
1.带外数据也叫紧急数据,通用用于一些紧急的情况和要求延迟小的数据。
2.紧急数据一次只能发送一个字节,而且它会随普通数据一起发送
以网络播放器为例:
播放器端(客户端):发送带外数据:
send(fd, 'p',1, MSG_OOB); //带外数据只有一个字节有效,若发送了多个字节,则除最后那个字节为带外数据外,其他的字节会被当成正常的数据
视频服务器(服务器):接收的带外数据:
当带外数据到达时:
1.系统会给应用发送SIGURG信号
2.如果fd被添加在select()的函数的异常集合中,则带外数据到达时,select会退出
编程:
第一种方法: 捕获SIGURG信号,在相应的信号处理函数中去调用recv()去接收:
int fd = -1;
void sig_urg_handler(int signo)
{
char buf_urg[1];
{
char buf_urg[1];
if(signo != SIGURG) return;
recv(fd, buf_urg, 1, MSG_OOB);
switch(buf_urg[0]) {
recv(fd, buf_urg, 1, MSG_OOB);
switch(buf_urg[0]) {
case 's': //停止
case 'c': //继续
//....
case 'c': //继续
//....
}
}
int main(void)
{
{
// ...
signal(SIGURG, sig_urg_handler);
signal(SIGURG, sig_urg_handler);
//...
while(1) {
while(1) {
recv(fd, buf,BUFSIZ,0);
}
}
第二种方法:
在select的异常集中中添加对各个建立连接的文件描述符的监控
0 0
- [Linux] Linux网络编程
- linux 网络编程----网络协议
- 学习Linux网络编程
- Linux网络编程入门
- 学习Linux网络编程
- Linux网络编程(一)
- Linux网络编程(二)
- Linux网络编程基本知识
- Linux网络编程
- linux网络编程基础
- Linux网络编程简介
- 学习Linux网络编程
- Linux网络编程
- Linux网络编程
- Linux网络编程
- Linux网络编程
- Linux网络编程
- Linux下网络编程
- 安装 postgresql 报错 "An error occured executing the Microsoft VC++ runtime installer"解决办法
- C#.Net前台线程与后台线程的区别 线程Jion的解释
- 第六周项目五 数据结构实践——后缀表达式(栈)
- ASP.NET MVC分页【无搜索条件的分页设计】
- 3、深入浅出JMS(三)--ActiveMQ简单的HelloWorld实例
- linux网络编程
- 测试
- Doctrine 2 ORM 事务处理
- 黑马程序员—面向对象知识汇总
- 关于迷宫问题 利用栈实现
- 有关Python的内容
- java 集成开发环境选择对比
- iOS 数据请求 get、post
- Java开发环境的配置(Windows)