} //取出首部Length域中的數值,該數值為內容部分的長度
return(read-all(sockfd,bur,n));//從接收緩沖區(qū)中讀出請求的內容部分
}
int get-char(int fd,char*ch){
static int offset=0;
static int size=0;
static char buff[1024];
//聲明靜態(tài)變量,在get_char多次被調用期間,該變量的內存不釋放
for(;size<=0 | | (8) ;){
size=read(fd,bur,1024);//一次從套接字緩沖區(qū)中讀出一個數據塊
if(size<0){
if(errno==EINTR){
size=0;
contine;
//EINTR表示本次讀操作沒有成功,但可以繼續(xù)使用該套接字讀出數i
}else
return(-1);
}
offset=0; //讀出數據后,將偏址置為0
*ch=buf[offset ++]; //將當前的字符取出,并將偏址移向下一字符
return (1) ;
}
int read _ line(int fd,char*buf,int msxlen){
int i, n;
char ch;
for(i=0;i< (9) ){
n=get_char(fd,&ch);//取出一個字符
if(n==1){
buff[i++]=ch;//將字符加入字符串中
if( (10) )break;
}else if(n<)return(-1);
else break;
}
buf[i]=`\0`;
return(i);
}
//函數read_line的作用是讀出請求的首部,其處理的方法是每次調用get_char函數,取出一個字符,檢查該字符是否是回車符`\n`,如果是回車符,就返回請求的首部
//get_char的處理方式較為特殊,并不是每次調用read函數讀一個字符,而是一次從緩沖區(qū)中讀一塊內容,再一次一個字符提交給函數read_line,如果提交完了就再讀一塊,這樣就可以提高讀緩沖區(qū)的效率。另外,由于客戶機是分兩次調用writ_all函數將請求的首部和內容發(fā)送給服務器,因此get_char不會取出請求內容部分的字符
部分SOCKET數據結構與函數:
1.地址結構。
sockaddr-in:
sockaddr_in類型的結構定義,sockaddr_in是通用套接字結構sockaddr在TCP/IP協(xié)議下的結構重定義,為TCP/IP套接字地址結構。
Struct sockaddr_in{
short int sin_family;//地址類型AF_XXX,其中AF_INET為TCP/IP專用
unsigned short int sin _port;//端口號
struct in_addr sin_addr;//Internet地址
//端口號以及Internet地址使用的是網絡字節(jié)順序,需要通過函數htons轉換
}
struct_inaddr{
_u32 s_addr;//類型為unsignel long
}
hostent:
hostent類型的結構定義
struct hostnet{
char*h_name;//主機的正式名稱
char**h_aliases;//別名列表
nit h_addrtvPe;//主機地址類型:AF_XXX
int h_length;//主機地址長度:4字節(jié)(32位)
char**h_addr_list;//主機IP地址列表
}
#define h_addr h_addr_list[0]
2.基本函數。
int socket(int domain,int type,int protocol);
函數socket創(chuàng)建一個套接字描述符,如果失敗則返回-1。domain為地址類型,type為套接字類型,本題中為SOCK_STREAM;protocol指定協(xié)議,本題中為0。
int connect(int sockfd,struct sockaddr*servaddr,int addrlen);
函數connect與服務器建立一個連接,成功返回0,失敗返回-1。servaddr為遠程服務器的套接字地址,包括服務器的IP地址和端口號;addrlen為地址的長度。
int read(int fd,char*bur,int len);
int write(int fd,char*buf,int len);
希望與其他軟考考生進行交流?點擊進入軟考論壇>>>
更多信息請訪問:考試吧軟件水平考試欄目
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內蒙古 |