嵌入式每日学习心得 网络通信技术(TCP)

来源:互联网 发布:算法导论第四版pdf 编辑:程序博客网 时间:2024/05/19 17:50
网络通信技术:


计算机网络通信技术


三大网络:
计算机网络(有线网络,WiFi)
电信网络(2G,3G,4G,5G)
有线电视网络


计算机网络:开放与廉价:


IP地址:用来唯一的标识某个网络中的一台设备


端口号(Port):用来唯一的标识同一台设备中的不同进程,就是一个
非负整数(0-65535)


网络通信实现方式:
1.基于TCP协议通信,面向连接,传输可靠,但效率底
2.基于UDP协议通信,无连接,传输效率高,但不保证可靠,尽力传输


基于TCP协议通信的实现,参与通信的两个程序是不对等的,一个是客
户端程序,一个是服务器端程序,即采用C(Client)/S(Server)模式
客户端主动发起通信,服务器端是被动通信


服务器端程序实现过程步骤:
1.创建监听(只能接)套接字
套接字(Socket):即插座,网络接入点,相当于手机


2.绑定地址,给套接字绑定端口号,相当与给手机上号


3.监听,将套接字设置为监听,相当于将手机设置为待机状态


4.接受客户端链接请求,相当于接受来电请求
5.收发数据,相当于相互通话
6.断开链接,相当于结束通话


7.关闭监听套接字,相当于关机或者将手机设为飞行模式
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/types.h>#include <sys/socket.h>#include <arpa/inet.h>int main(){        int listen_socket =socket(AF_INET, SOCK_STREAM, 0);        if(-1 == listen_socket)        {                perror("socket");                exit(-1);        }        struct sockaddr_in my_addr;        my_addr.sin_family=AF_INET;        my_addr.sin_addr.s_addr=INADDR_ANY;        my_addr.sin_port=htons(4321);        if(-1 == bind(listen_socket, (struct sockaddr*)&my_addr,sizeof(my_addr)))        {                perror("bind");                exit(-1);        }        if(-1 == listen(listen_socket,5))        {                perror("listen");                exit(-1);        }        socklen_t len = sizeof(my_addr);        int conn_socket =accept(listen_socket, (struct sockaddr*)&my_addr,&len);        if(-1 == conn_socket)        {                perror("accept");                exit(-1);        }        char buf[]="hello world!";        char msg[100];        int num;        if(send(conn_socket,buf,strlen(buf),0) == -1)        {                perror("send");                exit(-1);        }        if(num=recv(conn_socket,msg,sizeof(msg)-1,0) <= 0)        {                perror("recv");                exit(-1);        }        msg[num-1]='\0';        printf("客户端说:%s\n",msg);        close(conn_socket);        close(listen_socket);                return 0;}

原创粉丝点击