亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 基本udp套接口編程.txt

?? 學習(編程技巧_編程知識_程序代碼),是學習編程不可多得的學習精驗
?? TXT
字號:
基本UDP套接口編程
 

--------------------------------------------------------------------------------
 
第八軍團 時間:2004-1-17 21:32:27 
   

概述
UDP
無連接的 connectionless不可靠的 unreliable數據報協議 datagram

應用:DNS, NFS, SNMP, ICQ

TCP
面向連接的 connection-oriented可靠的 reliable字節流協議 byte stream

應用:www, telnet ,ftp



--------------------------------------------------------------------------------

UDP 客戶-服務器程序的套接口函數
recvfrom 和 sendto 函數

#include <sys/socket.h>
ssize_t recvfrom(int sockfd, void *buff, size nbytes, int flags, struct sockaddr *from, socklen_t *addrlen);

sockfd: 描述字

buff: 指向輸入緩沖器的指針

nbytes: 讀字節大小

flag: 標志:0

from :對方協議地址

addrlen: 對方協議地址長度

函數返回值: 讀入數據的長度,可以為0.

ssize_t sendto(int sockfd, void *buff, size nbytes, int flags, const struct sockaddr *to, socklen_t *addrlen);

TCP的字節流輸入輸出函數:
ssize_t readn(int sockfd, void *buff, size nbytes) ; 
ssize_t writen (int sockfd, void *buff, size nbytes);


--------------------------------------------------------------------------------

UDP回射服務器程序
//服務器main主程序

#include "unp.h"
Int main(int argc, char **argv)
{
int sockfd; //定義套接字
struct sockaddr_in servaddr, cliaddr; //IPv4套接口地址定義
sockfd = Socket(AF_INET, SOCK_DGRAM, 0); //建立UDP套接字
bzero(&servaddr, sizeof(servaddr)); //地址結構清零
servaddr.sin_family = AF_INET; //IPv4協議
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);//內核指定地址
servaddr.sin_port = htons(SERV_PORT); //9877 端口
/*分配協議地址,綁定端口*/
Bind(sockfd, (SA *) &servaddr, sizeof(servaddr)); 
/* 回射子程序*/
dg_echo(sockfd, (SA *) &cliaddr, sizeof(cliaddr));
}


回射子程序:

include "unp.h"
void dg_echo(int sockfd, SA *pcliaddr, socklen_t clilen)
{
int n; //讀入字節數
socklen_t len; //協議地址長度, 沒有這個參數用 clilen也可以
char mesg[MAXLINE];
for ( ; ; ) {
len = clilen;
/* 讀入一行 */
n = Recvfrom(sockfd, mesg, MAXLINE, 0, pcliaddr, &len);
/* 回射到對方套接口 */
Sendto(sockfd, mesg, n, 0, pcliaddr, len);
}
}


--------------------------------------------------------------------------------

UDP回射客戶程序
//客戶 main主程序

include "unp.h"
int main(int argc, char **argv) //命令行的第二個參數代表服務器地址
{ int sockfd; //套接字
struct sockaddr_in servaddr; //服務器地址結構
/* 必須在命令行指定服務器地址*/
if (argc != 2) err_quit("usage: udpcli <IPaddress>");
bzero(&servaddr, sizeof(servaddr)); //地址結構清零
servaddr.sin_family = AF_INET; //IPv4
servaddr.sin_port = htons(SERV_PORT); //9877端口
/*網絡字節序的IP地址*/
Inet_pton(AF_INET, argv[1], &servaddr.sin_addr); 
/*建立UPD套接口*/
sockfd = Socket(AF_INET, SOCK_DGRAM, 0);
/*回射客戶端子程序, stdin 為標準輸入:鍵盤*/
dg_cli(stdin, sockfd, (SA *) &servaddr, sizeof(servaddr));
exit(0); //子程序結束后退出程序
}

//客戶端回射子程序

#include "unp.h"
void dg_cli(FILE *fp, int sockfd, const SA *pservaddr, socklen_t servlen)
{
int n; //讀入字節數
char sendline[MAXLINE], recvline[MAXLINE + 1]; // 1:結束標志占用
/* 從鍵盤讀入一行 */
while (Fgets(sendline, MAXLINE, fp) != NULL) { //如果不是^D結束
/* 將讀入行發送到服務器套接口*/
Sendto(sockfd, sendline, strlen(sendline), 0, pservaddr, servlen);
/*從讀入回射,讀入字節數為n, 不關心從何處讀入
n = Recvfrom(sockfd, recvline, MAXLINE, 0, NULL, NULL);
recvline[n] = 0; /* recvline字符串的結束標志*/
Fputs(recvline, stdout); //輸出到標準輸出:顯示器
} //while循環結束:直到從鍵盤讀入結束符^D為止
}


--------------------------------------------------------------------------------

驗證收到的響應
void dg_cli(FILE *fp, int sockfd, const SA *pservaddr, socklen_t servlen)
{
int n; socklen_t len;
char sendline[MAXLINE], recvline[MAXLINE + 1];
struct sockaddr *preply_addr; //對方 (回應)地址指針
preply_addr = Malloc(servlen); //分配地址結構
while (Fgets(sendline, MAXLINE, fp) != NULL) {
Sendto(sockfd, sendline, strlen(sendline), 0, pservaddr, servlen);
len = servlen; 
/* 讀入一行,并獲得對方的套接口地址*/
n = Recvfrom(sockfd, recvline, MAXLINE, 0, preply_addr, &len);
/*對方套接口地址長度和指定服務器地址長度不相同*/
/*或套接口地址結構也不相同時,*/
if (len != servlen || memcmp(pservaddr, preply_addr, len) != 0) {
printf(“reply from %s (ignored)\n”, //忽略回射行,并輸出對方地址
Sock_ntop(preply_addr, len) ); 
continue; //下一輪循環
}
recvline[n] = 0; /* null terminate */
Fputs(recvline, stdout);
}
}



--------------------------------------------------------------------------------

服務器進程未運行
回射服務器-客戶端程序執行的基本步驟:

——啟動服務器
——啟動客戶程序

服務器沒有啟動,客戶端沒有回射行,一直等待

用tcpdump觀察數據包 tcpdump icmp or arp or port 9877

有ARP請求和應答:端口不可達 port ... unreachable

異步錯誤:由sendto 引起的ICMP錯誤, 而sendto本身并不返回該錯誤

用已連接套接口才能返回到UDP套接口,需要調用connect.


--------------------------------------------------------------------------------


UDP調用CONNECT
在末連接UDP套接口上給兩個數據報調用函數sendto導致內核執行下列六步:


1.連接套接口;
2.輸出第一個數據報
3.斷開套接口連接;
4.連接套接口,
5.輸出第二個數據報;
6.斷開套接口連接

已連接套接口發送兩個數據報的導致內核執行如下步驟;


1.連接套接口;
2.輸出第一個數據報;
3.輸出第二個數據報。

對同一套接口發送時,耗時減少1/3


--------------------------------------------------------------------------------

dg_cli 函數(修訂版)
調用connect 函數(有ICMP錯誤返回)
用read和write代替sendto 和 recvform

/* 調用connect函數的UDP 回射客戶子程序*/

void 
dg_cli(FILE *fp, int sockfd, const SA *pservaddr, socklen_t servlen)
{
int n;
char sendline[MAXLINE], recvline[MAXLINE + 1];
/* 與對方建立連接 */
Connect(sockfd, (SA *) pservaddr, servlen);

while (Fgets(sendline, MAXLINE, fp) != NULL) {
Write(sockfd, sendline, strlen(sendline));
n = Read(sockfd, recvline, MAXLINE);
recvline[n] = 0; /* null terminate */
Fputs(recvline, stdout);
}
}


--------------------------------------------------------------------------------

UPD缺乏流量控制
UDP沒有流量控制,它是不可靠的。

如果UDP發送方比UDP接收方運行速度快, 可能導致接收緩沖區滿而造成數據報丟失。

對服務器或客戶來說,并沒有給出任何指示說這些數據報已丟失。

UDP套接口緩沖區

由UDP給特定套接口排隊的UDP數據報數目受限于套接口接收緩沖區的大小。

用SO_RCVBUF套接口選項改變此值,可以改善數據報丟失的情況,但并不能從根本

上解決問題。

/*增大套接口接收隊列大小的函數*/

static void recvfrom_int(int); //內部函數
static int count;
void dg_echo(int sockfd, SA *pcliaddr, socklen_t clilen){
int n; socklen_t len;
char mesg[MAXLINE];
Signal(SIGINT, recvfrom_int);
n = 240 * 1024;
Setsockopt(sockfd, SOL_SOCKET, SO_RCVBUF, &n, sizeof(n));
for ( ; ; ) {
len = clilen;
Recvfrom(sockfd, mesg, MAXLINE, 0, pcliaddr, &len);
count++;
}
}
static void recvfrom_int(int signo) {
printf("\nreceived %d datagrams\n", count);
exit(0);
}


--------------------------------------------------------------------------------

UDP中外出接口的確定
已連接UDP套接口可用來確定用于待定目標的外出接口。

內核選擇本地IP地址(假設進程并沒有調用bind以明確地指派它)。

這個本地IP地址是通過給目的IP地址按索路由表,然后使用結果接口的主IP地址而選定的。


例程:

int main(int argc, char **argv)
{
int sockfd;
socklen_t len;
struct sockaddr_in cliaddr, servaddr;
if (argc != 2) err_quit("usage: udpcli <IPaddress>");
sockfd = Socket(AF_INET, SOCK_DGRAM, 0);
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(SERV_PORT);
Inet_pton(AF_INET, argv[1], &servaddr.sin_addr);
Connect(sockfd, (SA *) &servaddr, sizeof(servaddr));
len = sizeof(cliaddr);
Getsockname(sockfd, (SA *) &cliaddr, &len);
printf("local address %s\n", Sock_ntop((SA *) &cliaddr, len));
exit(0);
}
 
 
 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
jvid福利写真一区二区三区| 欧美一区二区三区视频免费| 白白色 亚洲乱淫| 一本大道综合伊人精品热热| 欧美日韩久久久一区| 制服丝袜亚洲播放| 久久久久久久久久久电影| 自拍av一区二区三区| 午夜视频一区在线观看| 国产在线视频一区二区三区| 99热精品一区二区| 欧美一级理论片| 国产精品区一区二区三区| 性做久久久久久免费观看| 成人一区二区三区| 97精品视频在线观看自产线路二| 日韩欧美卡一卡二| 亚洲男人的天堂av| 韩国在线一区二区| 欧美日韩在线综合| 国产精品美女久久久久久| 裸体一区二区三区| 91行情网站电视在线观看高清版| 精品久久久久久久久久久久久久久| 欧美三级电影精品| 中文字幕一区在线观看视频| 捆绑调教美女网站视频一区| 色婷婷综合久久久中文一区二区 | 欧美日韩你懂的| 国产精品青草久久| 成人免费视频一区二区| 久久婷婷国产综合精品青草| 久久99精品久久久久婷婷| 91精品国产手机| 日本成人在线电影网| 欧美美女直播网站| 天天综合日日夜夜精品| 欧美高清精品3d| 午夜久久久久久久久久一区二区| 欧美视频第二页| 午夜精品视频在线观看| 欧美精品日韩精品| 日本系列欧美系列| 久久亚洲综合色| 成人免费视频一区| 亚洲欧美国产毛片在线| 在线亚洲欧美专区二区| 亚洲国产精品久久久久婷婷884| 在线观看欧美黄色| 日本最新不卡在线| 久久综合色8888| 成人免费毛片高清视频| 亚洲美女免费视频| 欧美日韩国产综合草草| 狂野欧美性猛交blacked| 国产午夜精品久久久久久久| 成人的网站免费观看| 玖玖九九国产精品| 久久久五月婷婷| 99re8在线精品视频免费播放| 一区二区三区资源| 欧美三级日韩在线| 国模一区二区三区白浆| 亚洲六月丁香色婷婷综合久久 | 精品一区二区三区视频在线观看| 亚洲精品在线免费观看视频| 不卡一区二区三区四区| 日韩黄色小视频| 久久精品这里都是精品| 91偷拍与自偷拍精品| 青青草精品视频| 国产精品色婷婷久久58| 欧美日韩你懂得| 国产成人激情av| 亚洲成人三级小说| 国产欧美精品一区aⅴ影院| 日本韩国一区二区| 国产一区二区导航在线播放| 亚洲精品一二三| 久久女同性恋中文字幕| 欧美体内she精高潮| 成人午夜在线免费| 日韩中文字幕1| 中文成人综合网| 91精品国产欧美一区二区成人 | 最新国产成人在线观看| 欧美一区二区三区在线看| 波多野结衣中文字幕一区| 美脚の诱脚舐め脚责91| 亚洲免费av网站| 国产女人aaa级久久久级| 欧美r级在线观看| 欧美优质美女网站| 不卡的电影网站| 国产一区在线观看视频| 日韩国产欧美三级| 亚洲一区二区三区四区在线观看| 国产欧美日韩精品a在线观看| 日韩欧美电影一二三| 在线观看成人免费视频| 99精品久久免费看蜜臀剧情介绍| 激情综合网天天干| 日本一区中文字幕| 亚洲一区二区3| 亚洲丝袜自拍清纯另类| 国产精品乱人伦中文| 久久久av毛片精品| 欧美大片在线观看| 777欧美精品| 在线成人高清不卡| 在线播放欧美女士性生活| 在线一区二区三区做爰视频网站| www.日韩在线| av午夜精品一区二区三区| 国产69精品久久99不卡| 国产精品一卡二卡在线观看| 国内精品第一页| 国产精品系列在线播放| 国产精品1区2区| 成人福利视频在线看| 成人av网址在线观看| 成人黄动漫网站免费app| 成人成人成人在线视频| 日韩欧美一级二级三级| 日韩欧美你懂的| 国产亚洲精品福利| 自拍偷拍国产精品| 一区二区三区久久| 日韩黄色片在线观看| 精品在线观看视频| 国产一区二区三区av电影| 国产成人av一区二区| 成人手机电影网| 91久久精品午夜一区二区| 欧美偷拍一区二区| 日韩亚洲欧美一区二区三区| 精品国产一区二区在线观看| 久久精品人人爽人人爽| 国产精品久久午夜| 亚洲国产日韩av| 精品在线播放午夜| voyeur盗摄精品| 欧美日韩一卡二卡| 精品日韩成人av| 国产精品伦理在线| 伊人色综合久久天天人手人婷| 亚洲影院理伦片| 久久精品国产亚洲一区二区三区| 国产成人自拍高清视频在线免费播放| 成人性色生活片免费看爆迷你毛片| aaa欧美大片| 91精品国产黑色紧身裤美女| 国产偷v国产偷v亚洲高清| 亚洲图片欧美综合| 国产一区二区在线视频| 一本一本大道香蕉久在线精品| 91麻豆精品国产91久久久 | 亚洲欧洲在线观看av| 亚洲国产视频a| 高清不卡在线观看| 欧美人与z0zoxxxx视频| 国产三级精品三级在线专区| 最新国产の精品合集bt伙计| 麻豆成人综合网| 在线观看国产91| 国产亚洲成aⅴ人片在线观看| 亚洲一区二区在线免费看| 国内精品嫩模私拍在线| 99精品久久久久久| 久久天天做天天爱综合色| 亚洲一区av在线| 成人h动漫精品| 精品欧美一区二区久久 | 久久精品视频免费| 亚洲电影一区二区三区| 成人av资源网站| 欧美tk丨vk视频| 日本中文字幕一区二区有限公司| 91网站最新网址| 国产三级久久久| 国产一区二区福利视频| 日韩欧美国产麻豆| 午夜精品免费在线观看| 91成人网在线| 亚洲美女一区二区三区| 成人午夜av影视| 久久久国产精华| 国产精品一区二区在线观看不卡| 日韩欧美国产系列| 蜜桃精品视频在线观看| 欧美精品一二三| 亚洲成人av一区| 欧美精品三级在线观看| 亚洲一区二区三区免费视频| 97精品久久久午夜一区二区三区| 亚洲国产精品精华液ab| 丰满放荡岳乱妇91ww| 欧美激情在线观看视频免费| 国产伦精一区二区三区| 国产无一区二区|