linux篇:网络编程

一.进程间通信回顾

管道、消息队列、共享内存、信号和信号量。

特点:依赖于Linux内核

缺陷:无法多机通讯(Linux服务器与手机、51单片机等的通信)

网络编程:IP地址、端口号(找到哪台设备)

数据:协议(http\tcp\udp)(进行对话)

socket套接字:TCP->面向连接(可靠)

                        UDP->面向报文(不可靠  优:数据量大)

二.字节序

字节序是指多字节数据在计算机内存中存储或者网络传输时各字节的存储顺序。

常见的字节序:小端字节序(将低序字节存储在起始地址):Little endian

                          大端字节序(将高序字节存储在起始地址):Big endian

网络字节序=大端字节序

三.Linux提供的API简析

1.创建套接字

2.bind函数

3.监听

listen在服务端,客户端没有

4.连接

四.socket服务端代码实现

1.服务端代码

  1 #include <stdio.h>
  2 #include <sys/types.h>
  3 #include <sys/socket.h>
  4 #include <netinet/in.h>
  5 #include <arpa/inet.h>
  6 #include <stdlib.h>
  7 #include <string.h>
  8 #include <unistd.h>
  9 
 10 int main()
 11 {
 12    int s_fd;
 13    int n_read;
 14    char readBuf[128];
 15 
 16    char *msg="I get your connect";
 17    struct sockaddr_in s_addr;
 18    struct sockaddr_in c_addr;
 19 
 20    memset(&s_addr,0,sizeof(struct sockaddr_in));
 21    memset(&c_addr,0,sizeof(struct sockaddr_in));
 22 
 23 
 24    s_fd=socket(AF_INET,SOCK_STREAM,0);
 25    if(s_fd==-1){
 26         perror("socket");
 27         exit(-1);
 28     }
 29 
 30    s_addr.sin_family=AF_INET;
 31    s_addr.sin_port=htons(8988);
 32    inet_aton("172.20.10.3",&s_addr.sin_addr);
 33 
 34   bind(s_fd,(struct sockaddr *)&s_addr,sizeof(struct sockaddr_in));
 35 
 36   listen(s_fd,10);
 37   int clen= sizeof(struct sockaddr_in);
 38   int c_fd=accept(s_fd,(struct sockaddr *)&c_addr,&clen);
 39 
 40   if(c_fd==-1){
 41        perror("accpet");
 42    }
 43 
 44   printf("get connect:%s\n",inet_ntoa(c_addr.sin_addr));
 45   n_read=read(c_fd,readBuf,128);
 46   if(n_read == -1){
 47        perror("read");
 48     }
 49     else{
 50     printf("get message:%d,%s\n",n_read,readBuf);
 51    }
 52   write(c_fd,msg,strlen(msg));
 53 
 54 
 55   return 0;
 56 
 57 }
~                                                                                                                                                                                                                                                                                                                                                                                
~                                                                                                                                                                                                                                                                                                                                                                                
~                       

2.客户端代码

  1 #include <stdio.h>
  2 #include <sys/types.h>
  3 #include <sys/socket.h>
  4 #include <netinet/in.h>
  5 #include <arpa/inet.h>
  6 #include <stdlib.h>
  7 #include <string.h>
  8 #include <unistd.h>
  9 
 10 int main()
 11 {
 12    int c_fd;
 13    int n_read;
 14    char readBuf[128];
 15 
 16    char *msg="msg from client";
 17    struct sockaddr_in c_addr;
 18 
 19 
 20    memset(&c_addr,0,sizeof(struct sockaddr_in));
 21 
 22 
 23    c_fd=socket(AF_INET,SOCK_STREAM,0);
 24    if(c_fd==-1){
 25         perror("socket");
 26         exit(-1);
 27     }
 28 
 29    c_addr.sin_family=AF_INET;
 30    c_addr.sin_port=htons(8988);
 31    inet_aton("172.20.10.3",&c_addr.sin_addr);
 32 
 33   if( connect(c_fd,(struct sockaddr *)&c_addr,sizeof(struct sockaddr))==-1){
 34          perror("connect");
 35          exit(-1);
 36      }
 37   write(c_fd,msg,strlen(msg));
 38 
 39 
 40   n_read=read(c_fd,readBuf,128);
 41   if(n_read == -1){
 42        perror("read");
 43     }
 44     else{
 45     printf("get message from server:%d,%s\n",n_read,readBuf);
 46    }
 47 
 48 
 49   return 0;
 50 
 51 }
~                                                                                                                                                                                                                                                     
~              

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值