Linux+C学习笔记之网络编程

 1.网络编程不得不提的三大知识点:
 (1)IO流(设备:控制台(键盘和显示器标准的输入输出设备),文件,网络socket)
 IO流操作的三大步骤:定义流对象,数据的传输和转移,关闭流对象
 (2)多进程(多线程)
 (3)Socket网络编程
 
 一个服务器程序应该包括:socket(提供网络交互),IO(输入输出数据),多进程和多线程(实现程序的并发执行)
 
 2.linux网络优势
 (1)完善的内置网络
 (2)免费提供了大量支持Internent的软件
 (3)用户能通过一些Linux命令完成内部信息或文件的传输
 (4)提供远程访问的服务
 (5)安全可靠
 
 3.TCP/IP与OSI参考模型
 OSI参考模型:应用层(处理网络应用),表示层(数据表示),会话层(主机间通信),传输层(端到端的连接),网络层(寻址和最短路径),数据链路层(介质访问),物理层(二进制传输)。
 TCP/IP参考模型:应用层,传输层,网络层,网络接口层。
 
 4.Socket
 (1)Linux中的网络编程通过Socket(套接字)接口实现,Socket是一种文件描述符。
 描述:
 a.计算机进程间通信的一种方式(端点)
 b.起源于BSD (Berkeley Socket)
 c.是在named pipe 的基础上发展起来的
 d.可兼容多种协议:
  CP/IP NETBIOS UUCP XNS施乐
 e.可兼容多种操作系统:
  Windows   Linux   UINX    Mac OS
 (2)套接字socket有三种类型:
 流式套接字(SOCK_STREAM)
  流式的套接字可以提供可靠的、面向连接的通讯流。它使用TCP协议。TCP保证了数据传输的正确性和顺序性。
 数据报套接字(SOCK_DGRAM)
  数据报套接字定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证可靠,无差错,它使用UDP协议。
 原始套接字
  原始套接字允许对低层协议如IP或ICMP直接访问,主要用于新的网络协议的测试等。
 
 (3)Socket编程函数
 进行Socket编程的常用函数有:
 ①int socket(int domain, int type, int protocol)
 创建一个socket。
 
 ②int   bind(int   sockfd,  const  struct  sockaddr  *my_addr,  socklen_taddrlen);
 用于绑定IP地址和端口号到socket。
 
 ③int  connect(int  sockfd,  const  struct sockaddr *serv_addr, socklen_taddrlen);
 该函数用于绑定之后的client端,与服务器建立连接。
 
 ④int listen(int sockfd, int backlog);
 设置能处理的最大连接要求,Listen()并未开始接收连线,只是设置socket为listen模式。
 
 ⑤int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
 用来接受socket连接。
 
 ⑥ssize_t send(int s, const void *buf, size_t len, int flags);
        ssize_t  sendto(int  s,  const  void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen);//这个用于UDP协议
 发送数据
 
 ⑦ssize_t recv(int s, void *buf, size_t len, int flags);
        ssize_t recvfrom(int s, void *buf, size_t len, int flags,struct sockaddr *from, socklen_t *fromlen);//这个用于UDP协议
 接收数据
 
 ⑧int close(int fd);
 关闭socket连接。
 
 ⑨int setsockopt(int s, int  level,  int  optname,  const  void  *optval,socklen_t optlen);
 解决端口重用的问题。
 
 5.网络地址
 在socket程序设计中,struct sockaddr用于记录网络地址:
 struct sockaddr
 {
  u_short sa_family;
  char sa_data[14];
 }
 sa_family:
  地址族,采用“AF_xxx”的形式,如:AF_INET(IP协议族)。
 sa_data:
  14字节的特定协议地址。
 
 6.地址结构
 struct sockaddr_in
 {
  short int sin_family;  /* Internet地址族 */
  unsigned short int sin_port; /* 端口号 */
  struct in_addr sin_addr;  /* IP地址 */
  unsigned char sin_zero[8]; /* 填0 */
  }
 编程中一般并不直接针对sockaddr数据结构操作,而是使用与sockaddr等价的sockaddr_in数据结构
 struct in_addr
 {
 unsigned long s_addr;/* s_addr: 32位的地址。*/
 }
 
 7.HTTP服务器(web服务器)
 ①基于请求和响应的
 ②支持HTTP协议
 ③访问的方式:浏览器
 GET /address HTTP/1.1
 POST /address HTTP/1.1
 /*内存清零: void *memset(void *s, int c, size_t n); void bzero(void *s, size_t n);*/
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值