ubuntu 网络编程

ubuntu的网络编程

 

网络编程 一般有两种 TCP 和 UDP

TCP 是面向连接层的传输协议 是无误的 数据没有丢失的失序 和 数据不会重复到达的

UDP是用户数据协议 是不可靠的无连接的协议,但是可以进行高效率的传输。

 

说起TCP和UDP 就要提到 SOCKET

 这个是一个编程接口 和 特殊的文件描述符 面向有连接和无连接的

 

1:在进行网络编程的时候不管是 TCP 和 UDP 都要创建一个 套接字  有3种 不同的套接字 SOCK_STREAM,SOCK_DGRAM,SOCK_RAW,第一种是UDP传输的 ,2 是TCP,

第三种是 越过传输层直接作用于网络层的 PING 命令就是用这种套接字类型的。

 

2:在创建好了 之后  要对  struct  sockaddr_in  要进行填充的 

 

  struct sockaddr_in {

  short int sin_family; /* 地址族 */

  unsigned short int sin_port; /* 端口号 */

  struct in_addr sin_addr; /* IPV4 */

  unsigned char sin_zero[8]; /* 这个是为了传输的时候可以对齐 */

  };

因为在网络传输的时候 一般规定的是

 struct sockaddr

  {

  unsignedshort sa_family; /* address family */ |

  char sa_data[14]; /* up to 14 bytes of direct address */

  };

所以在传输的时候要进行强行转化

前面基本上是这样的  在接下来 就要分 TCP 和UDP 以及server client   的区别了。

 先说TCP,server

在TCP 编程的时候 是有3次握手的

 要进行绑定套接字

bind(scokfd,(struct sockaddr *)&myaddr,sizeof(struct sockaddr));

然后监听

listen(sockfd);

 之后就是等待接受client的连接请求

 newsock=accept(sockfd,(struct sockaddr *)&cliaddr,sizeof(cliaddr));   这个时候会创建一个新的套接字用于接收client的消息;

recv(newsock,buf,sizeof(buf),0);

send(newsock,buf,sizeof(buf));

 

client

也是要绑定套接字的

bind();

然后请求连接

connect(scokfd,(struct sockaddr *)&serveraddr,sizeof(struct scokaddr));

send(sockfd,buf,sizeof(buf),0);

recv(scokfd,buf,sizeof(buf));

 

 

UDP

server

 

前面也是创建sockfd 填充 sockaddr  bind()

len =strlen(struct sockaddr);

接收的用recvfrom(scokfd,buf,sizeof(buf),(struct scokaddr *)&cliaddr)&cliaddr,&len);

sendto(scokfd,buf,sizeof(buf),(struct sockaddr *)&cliaddr,sizeof(struct  sockaddr));

clinet  和 server 差不多的。

 

有几个 有用的小命令 chown root.root  文件名  改变文件的主属性

 chmod +是 文件名      执行的时候以文件的属主执行。

 有的时候或用到 strcmp()是比较字符

strncmp(buf,"quit",4);

strcpy()

 

UDP 可以多次使用 sockfd

inet_addr()错误的返回值是  ANADDR_NONE =0XFFFFFFFF 也就是-1;

signal(SIGCHLD,SIG_IGN) 忽略信号 将其处理   一般是用在 多路复用 和 并发执行的时候  容易产生僵尸进程   导致 套接字(1024个) 数量减少;


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值