亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

網絡編程--基礎篇

2019-11-14 10:43:00
字體:
來源:轉載
供稿:網友

#Socket簡介

是一個編程接口是一種特殊的文件描述符(everything in Unix is a file)并不僅限于TCPip協議面向連接(Transmission Control PRotocol - TCPIP)無連接(User Datagram Protocol-UDP 和 Inter-Network Packet Exchange-IPX)

#Socket類型流式套接字(SOCK_STREAM)提供了一個面向連接,可靠的數據傳輸服務,數據無差錯,無重復的發送且按發送順序接收。內設置流量控制,避免數據流淹沒慢的接收方。數據被看作是字節流,無長度限制數據報套接字(SOCK_DGRAM)提供無連接服務。數據包以獨立數據包的形式被發送,不提供無差錯保證,數據可能丟失或重復,順序發送,可能亂序接收原始套接字(SOCK_RAW)可以對較低層次協議如IP,ICMP直接訪問

#IP地址IP地址是Internet中主機的標識Internet中的主機要與別的機器通信必須具有一個IP地址IP地址為32位(IPV4)或者128位(IPV6)每個數據包都必須攜帶目的IP地址和源IP地址,路由器依靠此信息為數據包選擇路由表示形式:常用點分形式,如202.38.64.10,最后都會轉換為一個32位的無符號整數。

#IP地址的轉換inet_aton()將strptr所指的字符串轉換成32位的網絡字節序二進制值int inet_aton(const char *strptr, struct in_addr *addrptr);inet_addr()功能同上,返回轉換后的地址in_addr_t inet_addr(const char *strptr);inet_ntoa()將32位網絡字節序二進制地址轉換成點分十進制的字符串。char *inet_ntoa(struct in_addr inaddr);

#端口號為了區分一臺主機接收到的數據包應該轉交給哪個進程來進行處理,使用端口號來區分TCP端口號與UDP端口號獨立(協議不同可以使用同一個端口)三無組:協議,IP,端口端口號一般由IANA(Internet Assigned Numbers Authority)管理眾所周知端口:1~1023(1~255之間為眾所周知端口,256~1023端口通常由UNIX系統占用已登記端口:1024~49151動態或私有端口:49152~65535

#字節序不同類型CPU的主機中,內存存儲多字節整數序列有兩種方法,稱為主機字節序(HBO):小端序(little-endian)-低字節存儲在低地址將低字節存儲在起始地址,稱為"Little-Endian"字節序,Intel,AMD等采用的是這種方式大端序(big-endian)-高序字節存儲在低地址將高字節存儲在起始地址,稱為"Big-Endian"字節序,由ARM,Motorola等所采用網絡中傳輸的數據必須按網絡字節序,即大端字節序在大部分PC機上,當應用進程將整數送入socket前,需要轉化成網絡字節序;當應用進程從socket取出整數后,要轉化成小端字節序

#字節序轉換函數把給定系統所采用的字節序稱為主機字節序,為了避免不同類別主機之間在數據交換時由于對于字節序的不用而導致的差錯,引入了網絡字節序主機字節序到網絡字節序:u_long htonl(u_long hostlong);u_short htons(u_short short);網絡字節序到主機字節序u_long ntohl(u_long hostlong);u_short ntohs(u_short short);

#網絡編程相關APIint Socket(int domain, int type, int protocol);int bind(int Sockfd, struct sockaddr *my_addr, int addrlen);int listen(int sockfd, in backlog);int accept(int sockfd, struct sockaddr *addr, Socklen_t *addrlen);int connect(int sockfd, const struct sockaddr *addr, Socklen_t addrlen);ssize_t send(int sockfd, const void *buf, size_t len, int flags);ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,        const struct sockaddr *dest_addr, Socklen_t addrlen);ssize_t recv(int sockfd, void *buf, size_t len, int flags);ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,        struct sockaddr *src_addr, Socklen_t *addrlen);int shutdown(int sockfd, int how);

#command:netstat -anpt

#地址結構的一般用法1.定義一個struct sockaddr_in類型的變量并清空struct sockaddr_in myaddr;memset(&myaddr, 0, sizeof(myaddr));2.填充地址信息myaddr.sin_family = PF_INET;myaddr.sin_port = htons(8888);myaddr.sin_addr.s_addr = inet_addr("192.168.1.100");3.將該變量強制轉換為struct sockaddr類型在函數中使用bind(listenfd,(struct sockaddr *)&myaddr, sizeof(myaddr));

#地址轉換函數unsigned long inet_addr(const char *address);int inet_aton(const char *cp, struct in_addr *inp);char *inet_ntoa(struct in_addr in);

socket流程圖:

 

 

附:代碼

client.c

//int socket(int domain, int type, int protocol);//int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);//int listen(int sockfd, int backlog);//int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);//uint16_t htons(uint16_t hostshort);//int atoi(const char *nptr);//in_addr_t inet_addr(const char *cp);//void bzero(void *s, size_t n);//int listen(int sockfd, int backlog);//int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);//int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);#include <stdio.h>#include <sys/types.h>//socket():bind();listen():accept();listen();accept();connect();#include <sys/socket.h>//socket():bind();listen():accept();inet_addr();listen():accept();connect();#include <arpa/inet.h>//htons();inet_addr():#include <netinet/in.h>//inet_addr():#include <strings.h>//bzero();#include <stdlib.h>//atoi();exit();#include <unistd.h>//close():#include <string.h>#define N 64int main(int argc, char *argv[]){    if(argc < 3)    {        printf("Using: %s ip port/n",argv[0]);        exit(-1);    }    int sockfd;    struct sockaddr_in myaddr,peeraddr;    char buf[N] = {0};    size_t n;    socklen_t mylen,peerlen;    mylen = sizeof(myaddr);    peerlen = sizeof(peeraddr);    /*  creat socket  */    if(-1 == (sockfd = socket(AF_INET,SOCK_DGRAM,0)))    {        perror("socket");        exit(-1);    }    /* bind initialization */    bzero(&myaddr,sizeof(myaddr));    myaddr.sin_family = AF_INET;    myaddr.sin_port = htons(atoi(argv[2])+1);    myaddr.sin_addr.s_addr = inet_addr(argv[1]);    /*      bind      */    if(-1 == bind(sockfd, (struct sockaddr *)&myaddr, mylen))    {        perror("bind");        exit(-1);    }    /*    connect    */    bzero(&peeraddr, sizeof(peeraddr));    peeraddr.sin_family = AF_INET;    peeraddr.sin_port = htons(atoi(argv[2]));    peeraddr.sin_addr.s_addr = inet_addr(argv[1]);    //connect(sockfd,(struct sockaddr *)&peeraddr, peerlen);    while(1){    fgets(buf, N, stdin);    printf("buf:%s",buf);    if(-1 == (n = sendto(sockfd, buf, strlen(buf), 0, (struct sockaddr *)&peeraddr, peerlen)))    {        perror("sendto");        exit(-1);    }    if(strncmp(buf, "quit", 4) == 0)            break;    printf("n = %d/n",n);    }    close(sockfd);    exit(0);}復制代碼server.c復制代碼#include <stdio.h>#include <sys/types.h>//socket():bind();listen():accept();listen();accept();connect();#include <sys/socket.h>//socket():bind();listen():accept();inet_addr();listen():accept();connect();#include <arpa/inet.h>//htons();inet_addr():#include <netinet/in.h>//inet_addr():#include <strings.h>//bzero();#include <stdlib.h>//atoi();exit();#include <unistd.h>//close():#include <string.h>#define N 64typedef struct sockaddr SA;int main(int argc, char *argv[]){    if(argc < 3)    {        printf("Using: %s ip port/n",argv[0]);        exit(-1);    }    int listenfd, connfd;    struct sockaddr_in myaddr, peeraddr;    char buf[N] = {0};    size_t n;    socklen_t mylen, peerlen;    mylen = sizeof(myaddr);    peerlen = sizeof(peeraddr);    /*    create    socket    */    if ((listenfd = (socket(PF_INET, SOCK_DGRAM, 0))) < 0)    {        perror("socket");        exit(-1);    }    /*    bind initialization    */    bzero(&myaddr, mylen);    myaddr.sin_family = PF_INET;    myaddr.sin_port = htons(atoi(argv[2]));    inet_aton(argv[1], &myaddr.sin_addr);        if(bind(listenfd,(SA *)&myaddr, sizeof(myaddr)) < 0)    {        perror("bind");        exit(-1);    }    /*    listen        */    listen(listenfd, 5);    /*    accept        */    if(-1 == (connfd = accept(listenfd, (SA *)&peeraddr, &peerlen)))    {        perror("accept");        exit(-1);    }    printf("connect from %s: %d/n",inet_ntoa(peeraddr.sin_addr), ntohs(peeraddr.sin_port));    /*    recv-send    */    while(1){    n = recv(connfd, buf, N, 0);    buf[n] = 0;    printf("n = %d---%s/n",n,buf);    if(0 == strncmp(buf,"quit",4))    break;    send(connfd, buf, strlen(buf), 0);    }    close(connfd);    close(listenfd);    exit(0);}

原文鏈接:http://www.49028c.com/lr-ting/archive/2012/08/24/2652482.html


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕精品视频| 日韩二区三区在线| 欧美日韩中文字幕在线视频| 国产精品午夜一区二区欲梦| 激情久久av一区av二区av三区| 亚洲缚视频在线观看| 久久综合久久88| 中文字幕亚洲综合久久筱田步美| 97超碰国产精品女人人人爽| 国内精品久久久| 91久久久久久久久久久| 久久婷婷国产麻豆91天堂| 中文字幕在线成人| 欧美中文字幕精品| 欧美午夜丰满在线18影院| 日韩在线观看免费高清完整版| 精品福利视频导航| 久久99久久久久久久噜噜| 日韩av网站在线| 国产精品高清免费在线观看| 中文字幕日韩在线观看| 黄色成人在线播放| 91精品久久久久久| 国产午夜精品全部视频播放| 国产午夜精品全部视频在线播放| 琪琪第一精品导航| 成人午夜激情网| 日本午夜在线亚洲.国产| 日韩中文字幕国产精品| 国产精品电影观看| 欧美日韩国产影院| 久久伊人91精品综合网站| 久久久久久久久电影| 91网站在线免费观看| 九九九热精品免费视频观看网站| 亚洲国产精品久久久久秋霞蜜臀| 国产精品无av码在线观看| 2019最新中文字幕| 亚洲精品中文字| 91精品国产综合久久久久久久久| 中国china体内裑精亚洲片| 欧美激情第1页| 菠萝蜜影院一区二区免费| 国产中文字幕亚洲| 国产日韩欧美夫妻视频在线观看| 久久久久久久久久av| 中文字幕日韩欧美在线视频| 欧美一级成年大片在线观看| 国产欧美日韩最新| 欧美高清一级大片| 91久久在线播放| 好吊成人免视频| 亚洲黄色成人网| 久久艳片www.17c.com| 欧美激情视频给我| 亚洲韩国日本中文字幕| 日本成人免费在线| yw.139尤物在线精品视频| 欧美特级www| 久久久久久久久中文字幕| 中文字幕精品视频| 欧美美女15p| 国产精品久久久久久久久久久不卡| 亚洲综合视频1区| 亚洲成人精品久久久| 成人黄色免费网站在线观看| 夜夜躁日日躁狠狠久久88av| 国产91精品青草社区| 亚洲精品成人久久电影| 日韩影视在线观看| 91国自产精品中文字幕亚洲| 成人欧美一区二区三区在线| 亚洲全黄一级网站| 色妞久久福利网| 日韩av影片在线观看| 在线激情影院一区| 欧美成人免费在线视频| 国产精品夫妻激情| 欧美日韩亚洲一区二| 最近免费中文字幕视频2019| 亚洲最大av网站| 欧美—级a级欧美特级ar全黄| 中文字幕日韩免费视频| 欧美性xxxxx极品| 国产精品久久网| 精品中文字幕在线观看| 欧美视频一二三| 九色成人免费视频| 精品偷拍各种wc美女嘘嘘| 国产成人精品视| 国内成人精品视频| 国产精品久久在线观看| 欧美xxxx14xxxxx性爽| 欧美日韩中文在线观看| 国产亚洲人成网站在线观看| www.国产精品一二区| 国产精品7m视频| 国产精品久久久久不卡| 91网站免费看| 中文字幕欧美专区| 欧美一区二区三区精品电影| 国产亚洲精品激情久久| 国产精品v日韩精品| 欧美视频在线免费看| 欧美www在线| 精品在线观看国产| 久久精品99久久香蕉国产色戒| 欧美国产精品人人做人人爱| 国产欧美精品在线| 国产欧美在线视频| 深夜精品寂寞黄网站在线观看| 日韩精品www| 国产精品第七影院| 久久久久久久香蕉网| 久久影院资源网| 国色天香2019中文字幕在线观看| 国产精品久久av| 亚洲缚视频在线观看| 日韩中文字幕精品视频| 亚洲国产成人精品一区二区| 91免费看片在线| 久久精品青青大伊人av| 91免费电影网站| 久久激情视频久久| 欧美日本高清一区| 91精品国产一区| 91九色蝌蚪国产| 亚洲香蕉伊综合在人在线视看| 亚洲激情中文字幕| 国产精品视频永久免费播放| 欧美日韩福利在线观看| 欧美激情影音先锋| 欧美富婆性猛交| 欧美午夜www高清视频| 日韩国产激情在线| www.欧美三级电影.com| 精品亚洲精品福利线在观看| 日本中文字幕久久看| yw.139尤物在线精品视频| 亚洲精品国产精品久久清纯直播| 久久亚洲国产精品成人av秋霞| 欧美高清不卡在线| 一区二区日韩精品| 日韩精品亚洲视频| 成人字幕网zmw| 亚洲精品天天看| 日本欧美爱爱爱| 精品女厕一区二区三区| 成人精品网站在线观看| 日韩网站免费观看高清| 中文字幕亚洲一区| 亚洲丁香婷深爱综合| 日韩的一区二区| 欧美性xxxx在线播放| 久久久伊人日本| 欧美成人手机在线| 日韩国产精品亚洲а∨天堂免| 国产丝袜高跟一区| 中文字幕亚洲无线码在线一区| 岛国av一区二区| 欧美日韩在线影院| 91高清免费视频| 日韩中文字幕在线观看| 欧美激情亚洲综合一区|