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

首頁 > 網管 > 服務器 > 正文

TCP編程函數和步驟詳解

2020-05-27 13:08:13
字體:
來源:轉載
供稿:網友

   TCP編程的服務器端一般步驟是

  1、 創建一個socket,用函數socket();

  2、 設置socket屬性,用函數setsockopt(); * 可選

  3、 綁定IP地址、端口等信息到socket上,用函數bind();

  4、 開啟監聽,用函數listen();

  5、 接收客戶端上來的連接,用函數accept();

  6、 收發數據,用函數send()和recv(),者read()和write();

  7、 關閉網絡連接;

  8、 關閉監聽;

  TCP編程的客戶端一般步驟是:

  1、 創建一個socket,用函數socket();

  2、 設置socket屬性,用函數setsockopt();* 可選

  3、 綁定IP地址、端口等信息到socket上,用函數bind();* 可選

  4、 設置要連接的對方的IP地址和端口等屬性;

  5、 連接服務器,用函數connect();

  6、 收發數據,用函數send()和recv(),或者read()和write();

  7、 關閉網絡連接;

  UDP編程的服務器端一般步驟是:

  1、 創建一個socket,用函數socket();

  2、 設置socket屬性,用函數setsockopt();* 可選

  3、 綁定IP地址、端口等信息到socket上,用函數bind()

  4、 循環接收數據,用函數recvfrom();

  5、 關閉網絡連接;

  UDP編程的客戶端一般步驟是:

  1、 創建一個socket,用函數socket();

  2、 設置socket屬性,用函數setsockopt();* 可選

  3、 綁定IP地址、端口等信息到socket上,用函數bind();* 可選

  4、 設置對方的IP地址和端口等屬性;

  5、 發送數據,用函數sendto();

  6、 關閉網絡連接;

  常用的網絡命令:

  netstat

  命令netstat是用來顯示網絡的連接,路由表和接口統計等網絡的信息.netstat有許多的選項我們常用的選項是 -an 用來顯示詳細的網絡狀態.至于其它的選項我們可以使用幫助

  telnet

  telnet是一個用來遠程控制的程序,但是我們完全可以用這個程序來調試我們的服務端程序的. 比如我們的服務器程序在監聽8888端口,我們可以用telnet localhost 8888來查看服務端的狀況

  數據結構

  1、地址結構

  struct sockaddr_in {

  short int sin_family; /* 地址族 一般為AF-INET */

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

  struct in_addr sin_addr; /* IP地址 */

  unsigned char sin_zero[8]; /* 填充0 以保持與struct sockaddr同樣大小 使用memset()或bzero()來填充*/

  };

  struct sockaddr {

  unsigned short sa_family; /* 地址族, AF_xxx */

  char sa_data[14]; /* 14 字節的協議地址 */

  };

  2、DNS結構

  struct hostent {

  char *h_name; /* 主機的官方域名 */

  char **h_aliases; /* 一個以NULL結尾的主機別名數組 */

  int h_addrtype; /* 返回的地址類型,在Internet環境下為AF-INET */

  int h_length; /*地址的字節長度 */

  char **h_addr_list; /* 一個以0結尾的數組,包含該主機的所有地址*/

  };

  操作函數

  1、 socket:

  創建socket 描述符

  int socket(int domain, int type, int protocol);

  domain=AF_INET,socket的類型,type=SOCK_STREAM 或SOCK_DGRAM,分別表示TCP連接和UDP連接;protocol=0。

  返回一個整型socket描述符。

  2.bind:

  將socket描述符與你本機上的一個端口相關聯(僅用于服務器)

  int bind(int sockfd,struct sockaddr *my_addr, int addrlen);

  Sockfd是一個socket描述符

  my_addr是一個指向包含有本機IP地址及端口號等信息的sockaddr類型的指針;

  addrlen=sizeof(struct sockaddr)。

  返回:成功=0;失敗=-1,errno=錯誤號。

  可以用下面的賦值自動獲得本機IP地址和隨機獲取一個沒有被占用的端口號:

  my_addr.sin_port = 0; /* 系統隨機選擇一個未被使用的端口號 */

  my_addr.sin_addr.s_addr = INADDR_ANY; /* 填入本機IP地址 */

  3.Connect:

  與遠端服務器建立一個TCP連接 (用于客戶端)

  int connect(int sockfd, struct sockaddr *serv_addr, int addrlen);

  Sockfd是目的服務器的sockt描述符

  serv_addr是包含目的機IP地址和端口號的指針。

  返回:成功=0;失敗=-1,errno=錯誤號。

  4、Listen:

  監聽是否有服務請求 ,用于bind()后

  int listen(int sockfd, int backlog);

  Sockfd是Socket系統調用返回的socket 描述符;

  backlog指定在請求隊列中允許的最大請求數,缺省值為20。

  返回:成功=0;失敗=-1,errno=錯誤號。

  5.accept:

  接受來自客戶的請求

  int accept(int sockfd, void *addr, int *addrlen);

  sockfd是被監聽的socket描述符,

  addr 是指向sockaddr_in變量的指針,存放客戶主機的信息 ;

  addrten 指向值為sizeof(struct sockaddr_in)的整型指針變量。

  返回:成功返回一個新的socket描述符,來供這個新連接來使用。 錯誤發生時返回一個-1并且設置相應的errno值。

  6.Send:

  在連接(TCP)的socket方式下發送信息

  int send(int sockfd, const void *msg, int len, int flags);

  Sockfd是用來傳輸數據的socket描述符

  msg是一個指向要發送數據的指針。

  Len是以字節為單位的數據的長度。

  flags一般情況下置為0。

  7.recv:

  在連接(TCP)的socket方式下接收數據

  int recv(int sockfd,void *buf,int len,unsigned int flags);

  Sockfd是接受數據的socket描述符;

  buf 是存放接收數據的緩沖區;

  len是緩沖的長度。

  Flags也被置為0。

  返回:實際上接收的字節數,如果連接中止,返回0,。出現錯誤時,返回-1并置相應的errno值。

  8.sendto:

  在在無連接(UDP)的socket方式下發送數據

  int sendto(int sockfd, const void *msg,int len,unsigned int flags,const struct sockaddr *to, int tolen);

  to表示目地機的IP地址和端口號信息

  tolen=sizeof (struct sockaddr)。

  返回:實際發送的數據字節長度或在出現發送錯誤時返回-1。

  9.Recvfrom()

  在無連接(UDP)的socket方式下接收數據

  int recvfrom(int sockfd,void *buf,int len,unsigned int flags,struct sockaddr *from,int *fromlen);

  from 保存源機的IP地址及端口號。

  fromlen=sizeof(struct sockaddr)。

  返回:實際存入from中的數據字節數。當出現錯誤時返回-1,并置相應的errno。

  10.close()

  釋放socket,停止任何數據操作

  close(sockfd);

  11.shutdown:

  單向關閉連接

  int shutdown(int sockfd,int how);

  how可以設為下列值:

  ·0-------不允許繼續接收數據

  ·1-------不允許繼續發送數據

  ·2-------不允許繼續發送和接收數據,均為允許則調用close ()

  shutdown在操作成功時返回0,在出現錯誤時返回-1(并置相應errno)。

  12. gethostbyname:

  域名和IP地址的轉換

  struct hostent *gethostbyname(const char *name);

  13.inet_pton函數:

  將點分十進制串轉換成網絡字節序二進制值,此函數對IPv4地址和IPv6地址都能處理。

  int inet_pton(int family,const char * strptr,void * addrptr);

  第一個參數可以是AF_INET或AF_INET6:第二個參數是一個指向點分十進制串的指針:第三個參數是一個指向轉換后的網絡字節序的二進制值的指針。

  返回:1---成功   0---輸入不是有效的表達格式   -1---失敗

  14.inet_ntop函數:

  和inet_pton函數正好相反,inet_ntop函數是將網絡字節序二進制值轉換成點分十進制串。

  const char * inet_ntop(int family,const void * addrptr,char * strptr,size_t len);

  第一個參數可以是AF_INET或AF_INET6:第二個參數是一個指向網絡字節序的二進制值的指針;第三個參數是一個指向轉換后的點分十進制串的指針;第四個參數是目標的大小,以免函數溢出其調用者的緩沖區。

  返回:指向結果的指針---成功   NULL---失敗

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产成人涩涩涩视频在线观看| 久久免费视频在线| 成人在线精品视频| 国产精品99蜜臀久久不卡二区| 国产精品免费久久久久久| 日韩在线播放av| 日韩av中文在线| 国产又爽又黄的激情精品视频| 久久久女女女女999久久| 国产69精品久久久久久| 78m国产成人精品视频| 日韩资源在线观看| 亚洲男人av电影| 亚洲成年网站在线观看| 国产精品一久久香蕉国产线看观看| 78m国产成人精品视频| 国产日韩综合一区二区性色av| 亚洲综合一区二区不卡| 成人一区二区电影| 韩国精品美女www爽爽爽视频| 精品中文字幕在线2019| 久久亚洲精品小早川怜子66| 日韩精品在线视频| 欧美激情久久久久| 亚洲香蕉成人av网站在线观看| 国产精品一区二区三区毛片淫片| 国产成人小视频在线观看| 亚洲桃花岛网站| 亚洲免费视频在线观看| 国产亚洲精品一区二区| 伊人精品在线观看| 国产精品久久久久福利| 国产91亚洲精品| 日韩影视在线观看| 国产视频精品久久久| 欧美体内谢she精2性欧美| 亚洲欧美国产精品va在线观看| 欧美激情免费在线| 欧美肥臀大乳一区二区免费视频| 精品国内产的精品视频在线观看| 午夜剧场成人观在线视频免费观看| 日韩精品中文字幕视频在线| 欧美xxxx做受欧美.88| www国产精品com| 国产精品夜间视频香蕉| 亚洲欧美激情精品一区二区| 乱亲女秽乱长久久久| 成人精品视频99在线观看免费| 久久成人精品电影| 国产精品自拍偷拍视频| 欧美日韩精品中文字幕| 永久555www成人免费| 久久夜色精品国产欧美乱| 欧美亚洲国产成人精品| 国产+成+人+亚洲欧洲| 国产欧美最新羞羞视频在线观看| 91久久精品国产91久久性色| 亚洲第一免费网站| 国产婷婷成人久久av免费高清| 成人国产精品久久久久久亚洲| 国产z一区二区三区| 亚洲区中文字幕| 精品国产乱码久久久久久虫虫漫画| 精品久久久久久久久中文字幕| 国模叶桐国产精品一区| 国产精品欧美一区二区三区奶水| 色七七影院综合| 欧美一级高清免费播放| 久久久久久网站| 国产日韩欧美黄色| 精品丝袜一区二区三区| 国产精品成人v| 裸体女人亚洲精品一区| 久久久国产精品视频| 久久综合久久88| 蜜臀久久99精品久久久久久宅男| 欧美最近摘花xxxx摘花| 欧美俄罗斯性视频| 清纯唯美亚洲综合| 日韩的一区二区| 精品亚洲一区二区三区在线观看| 欧美一性一乱一交一视频| 国产精品欧美激情在线播放| 精品国产乱码久久久久酒店| 九九热这里只有精品免费看| 亚洲无线码在线一区观看| 久久精品99久久香蕉国产色戒| 97久久精品在线| 亚洲欧美另类国产| 欧美国产日韩视频| 一区二区三区精品99久久| 97视频com| 国产精品第10页| 久久久视频在线| 亚洲国产成人爱av在线播放| 7777kkkk成人观看| 亚洲免费福利视频| 亚洲人成网在线播放| 国产精品视频免费在线观看| 日韩电影免费观看在线观看| 久久久精品999| 国产成人一区二| 欧美激情视频一区| 色播久久人人爽人人爽人人片视av| 国内成人精品一区| 欧美日韩在线观看视频| 欧美理论电影网| 亚洲最大福利视频| 日韩av免费一区| 国产精品福利在线观看网址| 精品国产鲁一鲁一区二区张丽| 91视频国产一区| 精品久久久国产精品999| 1769国产精品| 亚洲va欧美va在线观看| 久久久99久久精品女同性| 日韩高清电影好看的电视剧电影| 热99精品里视频精品| 色偷偷888欧美精品久久久| 久久久在线视频| 久久久久免费精品国产| 91最新在线免费观看| 国产成人精品久久亚洲高清不卡| 一区二区三区亚洲| 欧美成人一区二区三区电影| 亚洲午夜色婷婷在线| 久热99视频在线观看| 久久精品人人做人人爽| 欧美日韩在线第一页| 亚洲精品美女在线观看播放| 日韩av电影手机在线| 亚洲综合在线小说| 国产精品jvid在线观看蜜臀| 亚洲免费电影一区| 一区二区在线免费视频| 亚洲天堂视频在线观看| 亚洲日本成人网| 国产在线精品自拍| 亚洲精品一区中文| 久久精品男人天堂| 性色av香蕉一区二区| 日韩免费视频在线观看| 欧美黄色成人网| 97精品国产97久久久久久免费| 91豆花精品一区| 色综合久久88色综合天天看泰| 91精品国产综合久久香蕉最新版| 日韩美女在线播放| 91探花福利精品国产自产在线| 国内精品一区二区三区| 欧美在线一区二区三区四| 国语自产偷拍精品视频偷| 国产精品高清免费在线观看| 久久中文精品视频| 这里只有精品视频| 久久亚洲国产成人| 欧美最猛黑人xxxx黑人猛叫黄| 另类视频在线观看| 国产亚洲人成a一在线v站| 中文字幕日韩电影| 欧美一级片久久久久久久| 国产精品中文字幕在线观看| 国产精品视频在线播放| 国内外成人免费激情在线视频网站|