當前位置:首頁 » 編程語言 » c語言accept

c語言accept

發布時間: 2023-05-18 09:28:52

A. 在c語言中a:c是什麼意思

c語言是慎族一門編程語言,a:c表示變數a到變數c,可以理解為,這是從a到c的意做旦思。
如果要列舉出來b到d的字母的出來,那麼b:d這樣子就可以表示出來了,這樣寬胡弊就能夠表達出b,c,d,這可以是循環語句。在c語言中,循環列舉是經常出現的。

B. C語言 網路編程 關於accept函數的問題

你的兩個調用方式最後一個參數,意義完全不同,&addrlen是將addrlen的地址傳給accept(是一個可以寫的變數地址)
而你的後一個,是將sizeof(addr)它是一個常量,一般為4,轉為指針傳給accept,這個地址是不可寫的

C. c語言文件傳輸

伺服器端(發送文件):首先打開文件【fopen】,用rb方式打開,既可以發送文本文件,也可以發送二進制文件,在無錯時初始化套接字socket,即初始化socket庫【WSAStartup】,分配socket【socket】,填充伺服器的地址,即填充sockaddr_in結構,然後進行綁定【bind】,設置套接字為監聽套接字【listen】,接收連接【accept】,至此伺服器阻塞,等待客戶端的連接。
客戶端(接收文件):首先打開文件【fopen】,用wb方式打開,在無錯時初始化套接字socket,即初始化socket庫【WSAStartup】,分配socket【socket】,填充客戶端的地址,即填充sockaddr_in結構,然後進行綁定【bind】,再填充伺服器的地址結構,然後調用【connect】進行連接,當連接成功後,第一階段的工作便結束了。
第二階段,發送文件。
伺服器端:使用循環while,結束條件是(!feof(fp)),fp是文件指針,feof檢測當前的文件讀取指針是否到達文件尾部,若到達了就返回真,否則返回假。然後在循環內部依次調用【fread】、【send】進行發送。這里有一個問題需要注意,調用fread的時候有兩個參數是要每次讀多少位元組和讀多少次,將第一個設置為1,將第二個設置為緩沖區的大小,用一個變數記錄實際讀到多少位元組,即【fread】的返回值,然後將其傳遞給【send】,就可以實現發送文件了,在發送完成後斷開連接【closesocket】,關閉文件【fclose】。
客戶端:使用while死循環,調用【recv】接收文件,【fwrite】寫入文件,這里也有個和上面類似的問題,就是要將recv的返回值傳遞給fwrite的第三個參數,即受到了多少位元組,就向文件中寫多少位元組。當recv返回值為0時(連接斷開時)退出循環,【closesocket】關閉套接字,調用【fclose】關閉文件。

D. c語言問題。大家幫忙!

bcmp(比較內存內容)
相關函數 bcmp,strcasecmp,strcmp,strcoll,strncmp,strncasecmp

表頭文件 #include<string.h>

定義函數 int bcmp ( const void *s1,const void * s2,int n);

函數說明 bcmp()用來比較s1和s2所指的內存區間前n個位元組,若參數n為0,則返回0。

返回值 若參數s1 和s2 所指的內存內容都完全相同則返回0 值,否則返回非零值。

附加說明 建議使用memcmp()取代。

範例 參考memcmp()。

b(拷貝內存內容)
相關函數 memccpy,memcpy,memmove,strcpy,ctrncpy

表頭文件 #include <string.h>

定義函數 void b ( const void *src,void *dest ,int n);

函數說明 b()與memcpy()一樣都是用來拷貝src所指的內存內容前n個位元組到dest所指的地址,不過參數src與dest在傳給函數時是相反的位置。

返回值

附加說明 建議使用memcpy()取代

範例 #include<string.h>
main()
{
char dest[30]=」string(a)」;
char src[30]=」string\0string」;
int i;
b(src,dest,30);/* src指針放在前*/
printf(b(): 「)
for(i=0;i<30;i++)
printf(「%c」,dest[i]);
memcpy(dest src,30); /*dest指針放在錢*/
printf(『\nmemcpy() : 「);
for(i=0;i<30;i++)
printf(「%c」,dest[i]);

執行 b() : string string
memcpy() :string sring

bzero(將一段內存內容全清為零)
相關函數 memset,swab

表頭文件 #include<string.h>

定義函數 void bzero(void *s,int n);

函數說明 bzero()會將參數s所指的內存區域前n個位元組,全部設為零值。相當於調用memset((void*)s,0,size_tn);

返回值

附加說明 建議使用memset取代

範例 參考memset()。

index(查找字元串中第一個出現的指定字元)
相關函數 rindex,srechr,strrchr

表頭文件 #include<string.h>

定義函數 char * index( const char *s, int c);

函數說明 index()用來找出參數s字元串中第一個出現的參數c地址,然後將該字元出現的地址返回。字元串結束字元(NULL)也視為字元串一部分。

返回值 如果找到指定的字元則返回該字元所在地址,否則返回0。

範例 #include<string.h>
main()
{
char *s =」」;
char *p;
p =index(s,』5』);
printf(%s\n」,p);
}

執行 5.68E+25

memccpy(拷貝內存內容)
相關函數 b,memcpy,memmove,strcpy,strncpy

表頭文件 #include<string.h>

定義函數 void * memccpy(void *dest, const void * src, int c,size_t n);

函數說明 memccpy()用來拷貝src所指的內存內容前n個位元組到dest所指的地址上。與memcpy()不同的是,memccpy()會在復制時檢查參數c是否出現,若是則返回dest中值為c的下一個位元組地址。

返回值 返回指向dest中值為c的下一個位元組指針。返回值為0表示在src所指內存前n個位元組中沒有值為c的位元組。

範例 #include<string.h>
main()
{
char a[]="string[a]";
char b[]="string(b)";
memccpy(a,b,'B',sizeof(b));
printf("memccpy():%s\n",a);
}

執行 memccpy():string(b)

memchr(在某一內存范圍中查找一特定字元)
相關函數 index,rindex,strchr,strpbrk,strrchr,strsep,strspn,strstr

表頭文件 #include<string.h>

定義函數 void * memchr(const void *s,int c,size_t n);

函數說明 memchr()從頭開始搜尋s所指的內存內容前n個位元組,直到發現第一個值為c的位元組,則返回指向該位元組的指針。

返回值 如果找到指定的位元組則返回該位元組的指針,否則返回0。

範例 #include <string.h>
main()
{
char *s="";
char *p;
p=memchr(s,'5',10);
printf("%s\n",p);
}

執行 5.68E+25

memcmp(比較內存內容)
相關函數 bcmp,strcasecmp,strcmp,strcoll,strncmp,strncasecmp

表頭文件 #include<string.h>

定義函數 int memcmp (const void *s1,const void *s2,size_t n);

函數說明 memcmp()用來比較s1和s2所指的內存區間前n個字元。字元串大小的比較是以ASCII碼表上的順序來決定,次順序亦為字元的值。memcmp()首先將s1第一個字元值減去s2第一個字元的值,若差為0則再繼續比較下個字元,若差值不為0則將差值返回。例如,字元串"Ac"和"ba"比較則會返回字元'A'(65)和'b'(98)的差值(-33)。

返回值 若參數s1和s2所指的內存內容都完全相同則返回0值。s1若大於s2則返回大於0的值。s1若小於s2則返回小於0的值。

範例 #include<string.h>
main()
{
char *a ="aBcDeF";
char *b="AbCdEf";
char *c="aacdef";
char *d="aBcDeF";
printf("memcmp(a,b):%d\n",memcmp((void*)a,(void*) b,6));
printf("memcmp(a,c):%d\n",memcmp((void*)a,(void*) c,6));
printf("memcmp(a,d):%d\n",memcmp((void*)a,(void*) d,6));

執行 memcmp(a,b):1 /*字元串a>字元串b,返回1*/
memcmp(a,c):-1 /* 字元串a<字元串c,返回-1*/
memcmp(a,d):0 /*字元串a=字元串d,返回0*/

memcpy(拷貝內存內容)
相關函數 b,memccpy,memcpy,memmove,strcpy,strncpy

表頭文件 #include<string.h>

定義函數 void * memcpy (void * dest ,const void *src, size_t n);

函數說明 memcpy()用來拷貝src所指的內存內容前n個位元組到dest所指的內存地址上。與strcpy()不同的是,memcpy()會完整的復制n個位元組,不會因為遇到字元串結束'\0'而結束。

返回值 返回指向dest的指針。

附加說明 指針src和dest所指的內存區域不可重疊。

範例 #include<string.h>
main()
{
char a[30]="string (a)";
char b[30]="string\0string";
int i;
strcpy(a,b);
printf("strcpy():");
for(i=0;i<30;i++)
printf("%c",a[i]);
memcpy(a,b,30);
printf("\nmemcpy() :");
for(i=0;i<30;i++)
printf("%c",a[i]);
}

執行 strcpy() : string a )
memcpy() : string string

memmove(拷貝內存內容)
相關函數 b,memccpy,memcpy,strcpy,strncpy

表頭文件 #include<string.h>

定義函數 void * memmove(void *dest,const void *src,size_t n);

函數說明 memmove()與memcpy()一樣都是用來拷貝src所指的內存內容前n個位元組到dest所指的地址上。不同的是,當src和dest所指的內存區域重疊時,memmove()仍然可以正確的處理,不過執行效率上會比使用memcpy()略慢些。

返回值 返回指向dest的指針。

附加說明 指針src和dest所指的內存區域可以重疊。

範例 參考memcpy()。

memset(將一段內存空間填入某值)
相關函數 bzero,swab

表頭文件 #include<string.h>

定義函數 void * memset (void *s ,int c, size_t n);

函數說明 memset()會將參數s所指的內存區域前n個位元組以參數c填入,然後返回指向s的指針。在編寫程序時,若需要將某一數組作初始化,memset()會相當方便。

返回值 返回指向s的指針。

附加說明 參數c雖聲明為int, 但必須是unsigned char ,所以范圍在0到255之間。

範例 #include <string.h>
main()
{
char s[30];
memset (s,'A',sizeof(s));
s[30]='\0';
printf("%s\n",s);
}

執行

rindex(查找字元串中最後一個出現的指定字元)
相關函數 index,memchr,strchr,strrchr

表頭文件 #include<string.h>

定義函數 char * rindex( const char *s,int c);

函數說明 rindex()用來找出參數s字元串中最後一個出現的參數c地址,然後將該字元出現的地址返回。字元串結束字元(NULL)也視為字元串一部分。

返回值 如果找到指定的字元則返回該字元所在的地址,否則返回0。

範例 #include <string.h>
mian()
{
char *s ="";
char *p;
p=rindex(s,'5');
printf("%s\n",p);
}

執行 567890

strcasecmp(忽略大小寫比較字元串)
相關函數 bcmp,memcmp,strcmp,strcoll,strncmp

表頭文件 #include<string.h>

定義函數 int strcasecmp (const char *s1, const char *s2);

函數說明 strcasecmp()用來比較參數s1和s2字元串,比較時會自動忽略大小寫的差異。

返回值 若參數s1和s2字元串相同則返回0。s1長度大於s2長度則返回大於0 的值,s1 長度若小於s2 長度則返回小於0的值。

範例 #include <string.h>
main()
{
char *a="aBcDeF";
char *b="AbCdEf";
if(!strcasecmp(a,b))
printf("%s=%s\n",a,b);
}

執行 aBcDeF=AbCdEf

strcat(連接兩字元串)
相關函數 b,memccpy,memcpy,strcpy,strncpy

表頭文件 #include <string.h>

定義函數 char *strcat (char *dest,const char *src);

函數說明 strcat()會將參數src字元串拷貝到參數dest所指的字元串尾。第一個參數dest要有足夠的空間來容納要拷貝的字元串。

返回值 返回參數dest的字元串起始地址

範例 #include <string.h.>
main()
{
char a[30]="string(1)";
char b[]="string(2)";
printf("before strcat() : %s\n",a);
printf("after strcat() : %s\n",strcat(a,b));
}

執行 before strcat () : string(1)
after strcat () : string(1)string(2)

strchr(查找字元串中第一個出現的指定字元)
相關函數 index,memchr,rinex,strbrk,strsep,strspn,strstr,strtok

表頭文件 #include<string.h>

定義函數 char * strchr (const char *s,int c);

函數說明 strchr()用來找出參數s字元串中第一個出現的參數c地址,然後將該字元出現的地址返回。

返回值 如果找到指定的字元則返回該字元所在地址,否則返回0。

範例 #include<string.h>
main()
{
char *s=」;
char *p;
p=strchr(s,'5');
printf("%s\n",p);
}

執行 5.68E+25

strcmp(比較字元串)
相關函數 bcmp,memcmp,strcasecmp,strncasecmp,strcoll

表頭文件 #include<string.h>

定義函數 int strcmp(const char *s1,const char *s2);

函數說明 strcmp()用來比較參數s1和s2字元串。字元串大小的比較是以ASCII 碼表上的順序來決定,此順序亦為字元的值。strcmp()首先將s1第一個字元值減去s2第一個字元值,若差值為0則再繼續比較下個字元,若差值不為0則將差值返回。例如字元串"Ac"和"ba"比較則會返回字元"A"(65)和'b'(98)的差值(-33)。

返回值 若參數s1和s2字元串相同則返回0。s1若大於s2則返回大於0的值。s1若小於s2則返回小於0 的值。

範例 #include<string.h>
main()
{
char *a="aBcDeF";
char *b="AbCdEf";
char *c="aacdef";
char *d="aBcDeF";
printf("strcmp(a,b) : %d\n",strcmp(a,b));
printf("strcmp(a,c) : %d\n",strcmp(a,c));
printf("strcmp(a,d) : %d\n",strcmp(a,d));
}

執行 strcmp(a,b) : 32
strcmp(a,c) :-31
strcmp(a,d) : 0

strcoll(採用目前區域的字元排列次序來比較字元串)
相關函數 strcmp,bcmp,memcmp,strcasecmp,strncasecmp

表頭文件 #include<string.h>

定義函數 int strcoll( const char *s1, const char *s2);

函數說明 strcoll()會依環境變數LC_COLLATE所指定的文字排列次序來比較s1和s2 字元串。

返回值 若參數s1和s2字元串相同則返回0。s1若大於s2則返回大於0的值。s1若小於s2則返回小於0 的值。

附加說明 若LC_COLLATE為"POSIX"或"C",則strcoll()與strcmp()作用完全相同。

範例 參考strcmp()。

strcpy(拷貝字元串)
相關函數 b,memcpy,memccpy,memmove

表頭文件 #include<string.h>

定義函數 char *strcpy(char *dest,const char *src);

函數說明 strcpy()會將參數src字元串拷貝至參數dest所指的地址。

返回值 返回參數dest的字元串起始地址。

附加說明 如果參數dest所指的內存空間不夠大,可能會造成緩沖溢出(buffer Overflow)的錯誤情況,在編寫程序時請特別留意,或者用strncpy()來取代。

範例 #include<string.h>
main()
{
char a[30]="string(1)";
char b[]="string(2)";
printf("before strcpy() :%s\n",a);
printf("after strcpy() :%s\n",strcpy(a,b));
}

執行 before strcpy() :string(1)
after strcpy() :string(2)

strcspn(返回字元串中連續不含指定字元串內容的字元數)
相關函數 strspn

表頭文件 #inclued<string.h>

定義函數 size_t strcspn ( const char *s,const char * reject);

函數說明 strcspn()從參數s字元串的開頭計算連續的字元,而這些字元都完全不在參數reject 所指的字元串中。簡單地說,若strcspn()返回的數值為n,則代表字元串s開頭連續有n個字元都不含字元串reject內的字元。

返回值 返回字元串s開頭連續不含字元串reject內的字元數目。

範例 #include <string.h>
main()
{
char *str="linux was first developed for 386/486-based pcs.";
printf("%d\n",strcspn(str," "));
printf("%d\n",strcspn(str,"/-"));
printf("%d\n",strcspn(str,"1234567890"));
}

執行 5 /*只計算到「 」的出現,所以返回「Linux」的長度*/
33 /*計算到出現「/」或「-」,所以返回到「6」的長度*/
30 /* 計算到出現數字字元為止,所以返回「3」出現前的長度*/

strp(復制字元串)
相關函數 calloc,malloc,realloc,free

表頭文件 #include<string.h>

定義函數 char * strp( const char *s);

函數說明 strp()會先用maolloc()配置與參數s字元串相同的空間大小,然後將參數s字元串的內容復制到該內存地址,然後把該地址返回。該地址最後可以利用free()來釋放。

返回值 返回一字元串指針,該指針指向復制後的新字元串地址。若返回NULL表示內存不足。

範例 #include<string.h>
main()
{
char a[]="strp";
char *b;
b=strp(a);
printf("b[ ]=\"%s\"\n",b);
}

執行 b[ ]="strp"

strlen(返回字元串長度)
相關函數

表頭文件 #include<string.h>

定義函數 size_t strlen (const char *s);

函數說明 strlen()用來計算指定的字元串s的長度,不包括結束字元"\0"。

返回值 返回字元串s的字元數。

範例 /*取得字元串str的長度*/
#include<string.h>
main()
{
char *str = "12345678";
printf("str length = %d\n", strlen(str));
}

執行 str length = 8

strncasecmp(忽略大小寫比較字元串)
相關函數 bcmp,memcmp,strcmp,strcoll,strncmp

表頭文件 #include<string.h>

定義函數 int strncasecmp(const char *s1,const char *s2,size_t n);

函數說明 strncasecmp()用來比較參數s1和s2字元串前n個字元,比較時會自動忽略大小寫的差異。

返回值 若參數s1和s2 字元串相同則返回0。s1 若大於s2則返回大於0的值,s1若小於s2則返回小於0 的值。

範例 #include<string.h>
main()
{
char *a="aBcDeF";
char *b="AbCdEf";
if(!strncasecmp(a,b))
printf("%s =%s\n",a,b);
}

執行 aBcDef=AbCdEf

strncat(連接兩字元串)
相關函數 b,memccpy,memecpy,strcpy,strncpy

表頭文件 #inclue <string.h>

定義函數 char * strncat(char *dest,const char *src,size_t n);

函數說明 strncat()會將參數src字元串拷貝n個字元到參數dest所指的字元串尾。第一個參數dest要有足夠的空間來容納要拷貝的字元串。

返回值 返回參數dest的字元串起始地址。

範例 #include <string.h>
main()
{
char a[30]="string(1)";
char b[]="string(2)";
printf("before strnact() :%s\n", a);
printf("after strncat() :%s\n", strncat(a,b,6));
}

執行 before strnact() : string(1)
after strncat() : string(1) string

strncpy(拷貝字元串)
相關函數 b,memccpy,memcpy,memmove

表頭文件 #include<string.h>

定義函數 char * strncpy(char *dest,const char *src,size_t n);

函數說明 strncpy()會將參數src字元串拷貝前n個字元至參數dest所指的地址。

返回值 返回參數dest的字元串起始地址。

範例 #inclue <string.h>
main()
{
char a[30]="string(1)";
char b[]="string(2)";
printf("before strncpy() : %s\n",a);
printf("after strncpy() : %s\n",strncpy(a,b,6));
}

執行 before strncpy() : string(1)
after strncpy() : string(1)

strpbrk(查找字元串中第一個出現的指定字元)
相關函數 index,memchr,rindex,strpbrk,strsep,strspn,strstr,strtok

表頭文件 #include <include.h>

定義函數 char *strpbrk(const char *s,const char *accept);

函數說明 strpbrk()用來找出參數s 字元串中最先出現存在參數accept 字元串中的任意字元。

返回值 如果找到指定的字元則返回該字元所在地址,否則返回0。

範例 #include <string.h>
main()
{
char *s="";
char *p;
p=strpbrk(s,"a1 839"); /*1會最先在s字元串中找到*/
printf("%s\n",p);
p=strprk(s,"4398");/*3 會最先在s 字元串中找到*/
printf("%s\n",p);

執行 1.23E+29

strrchr(查找字元串中最後出現的指定字元)
相關函數 index,memchr,rindex,strpbrk,strsep,strspn,strstr,strtok

表頭文件 #include<string.h>

定義函數 char * strrchr(const char *s, int c);

函數說明 strrchr()用來找出參數s字元串中最後一個出現的參數c地址,然後將該字元出現的地址返回。

返回值 如果找到指定的字元則返回該字元所在地址,否則返回0。

範例 #include<string.h>
main()
{
char *s="";
char *p;
p=strrchr(s,'5');
printf("%s\n",p);
}

執行 567890

strspn(返回字元串中連續不含指定字元串內容的字元數)
相關函數 strcspn,strchr,strpbrk,strsep,strstr

表頭文件 #include<string.h>

定義函數 size_t strspn (const char *s,const char * accept);

函數說明 strspn()從參數s 字元串的開頭計算連續的字元,而這些字元都完全是accept 所指字元串中的字元。簡單的說,若strspn()返回的數值為n,則代表字元串s 開頭連續有n 個字元都是屬於字元串accept內的字元。

返回值 返回字元串s開頭連續包含字元串accept內的字元數目。

範例 #include<string.h>
main()
{
char *str="Linux was first developed for 386/486-based PCs.";
char *t1="";
printf("%d\n",strspn(str,t1));
}

執行 5 /*計算大小寫字母。不包含「 」,所以返回Linux的長度。*/

strstr(在一字元串中查找指定的字元串)
相關函數 index,memchr,rindex,strchr,strpbrk,strsep,strspn,strtok

表頭文件 #include<string.h>

定義函數 char *strstr(const char *haystack,const char *needle);

函數說明 strstr()會從字元串haystack 中搜尋字元串needle,並將第一次出現的地址返回。

返回值 返回指定字元串第一次出現的地址,否則返回0。

範例 #include<string.h>
main()
{
char * s="";
char *p;
p= strstr(s,"901");
printf("%s\n",p);
}

執行 9.01E+21

strtok(分割字元串)
相關函數 index,memchr,rindex,strpbrk,strsep,strspn,strstr

表頭文件 #include<string.h>

定義函數 char * strtok(char *s,const char *delim);

函數說明 strtok()用來將字元串分割成一個個片段。參數s指向欲分割的字元串,參數delim則為分割字元串,當strtok()在參數s的字元串中發現到參數delim的分割字元時則會將該字元改為\0 字元。在第一次調用時,strtok()必需給予參數s字元串,往後的調用則將參數s設置成NULL。每次調用成功則返回下一個分割後的字元串指針。

返回值 返回下一個分割後的字元串指針,如果已無從分割則返回NULL。

範例 #include<string.h>
main()
{
char s[]="ab-cd : ef;gh :i-jkl;mnop;qrs-tu: vwx-y;z";
char *delim="-: ";
char *p;
printf("%s ";strtok(s,delim));
while((p=strtok(NULL,delim)))printf("%s ",p);
printf("\n");
}

執行 ab cd ef;gh i jkl;mnop;qrs tu vwx y;z /*-與:字元已經被\0 字元取代*/

E. c語言socket編程中accept的阻塞問題

埠就是負責監聽連接請求的.如果監聽到該埠的請求那麼就可以確定是對你這個伺服器的請求.一旦這個埠被佔用,那麼其它任何程序都無法再使用這個埠.所以我們要避開系統常用埠,要從1024以上的埠選擇.
在伺服器端
sin_port
是不可以被設置為0的,
否則客戶端的確無法連接.
而客戶端可以設置為0,客戶端可以任意埠的,沒有影響.

F. 基於c語言,網路編程,伺服器接收客戶端1的信息發送給客戶端2

char buff2[1024*10];
int receiveLen;

/*調用accept函數,等待客戶端的連接*/
client_fd=accept(sockfd,(struct sockaddr *)&client_sockaddr,&sin_size
/*調用recv函數接收客戶端的請求*/
recvbytes=recv(client_fd,buf,BUFFER_SIZE,0)

typedef int (WINAPI ICEPUB_TCPSENDANDRECEIVETEXT)(char *sendBuff, int sendBuffLen,char *recvBuff,int recvMaxLen,char* serverIP,int serverPort);
ICEPUB_TCPSENDANDRECEIVETEXT *icePub_tcpSendAndReceiveText = 0;
HINSTANCE hDLLDrv = LoadLibrary("icePubDll.dll");
if(hDLLDrv)
{
icePub_tcpSendAndReceiveText=(ICEPUB_TCPSENDANDRECEIVETEXT *)GetProcAddress(hDLLDrv,"icePub_tcpSendAndReceiveText");
}
if(icePub_tcpSendAndReceiveText)
receiveLen=icePub_tcpSendAndReceiveText(buf,recvbytes),buff2,1024*10,"192.168.1.2",8000);
if(hDLLDrv)
FreeLibrary(hDLLDrv);

AfxMessageBox(buff2);

G. winsock API中的「accept」函數問題

默認游如阻塞式

沒有連接請求時,accept()以阻神攔啟塞方式進入等待狀態,直到有一個衡旅請求到達為止

H. 誰能告訴我accept()函數返回一個新的套接字,所謂新套接字怎麼理解

誰能告訴我accept()函數返回一個新的套接字,所謂新套接字就是說這個是新產生的套接字,並不是你用來accept的那個監聽的套接字。跡如
accept()函數用於一個套介面接受一個連接。accept()是c語言中網路編程的重要的函數,windows系統在#include<winsock.h>困州搏 ,而linux系統在#include <sys/socket.h>中。
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
參數
sockfd:套介面描述字,該套介面在listen()後監聽連接。
addr:(可選)指針,指向一緩沖區,其中接收為通訊層所知的連接實體的地址。Addr參數的實際汪祥格式由套介面創建時所產生的地址族確定。
addrlen:(可選)指針,輸入參數,配合addr一起使用,指向存有addr地址長度的整型數。
實例:
#ifndef UNICODE
#defineUNICODE
#endif
#include <winsock2.h>
#include <stdio.h>
#include <windows.h>
#pragmacomment(lib,"Ws2_32.lib")
int wmain(void)
{
WSADATAwsaData ;
intiResult=WSAStartup(MAKEWORD(2,2),&wsaData);
if(iResult!=NO_ERROR)
{
wprintf(L "WSAStartupfailedwitherror:%ld\n",iResult);
return 1 ;
}
SOCKETListenSocket ;
ListenSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(ListenSocket==INVALID_SOCKET)
{
wprintf(L "socketfailedwitherror:%ld\n",WSAGetLastError());
WSACleanup();
return 1 ;
}
sockaddr_inservice ;
service.sin_family=AF_INET ;
service.sin_addr.s_addr=inet_addr("127.0.0.1");
service.sin_port=htons(27015);
if(bind(ListenSocket,
(SOCKADDR*)&service,sizeof(service))==SOCKET_ERROR)
{
wprintf(L"bindfailedwitherror:%ld\n",WSAGetLastError());
closesocket(ListenSocket);
WSACleanup();
return 1 ;
}
if(listen(ListenSocket,1)==SOCKET_ERROR)
{
wprintf(L"listenfailedwitherror:%ld\n",WSAGetLastError());
closesocket(ListenSocket);
WSACleanup();
return 1 ;
}
SOCKETAcceptSocket ;
wprintf(L "Waitingforclienttoconnect...\n");
AcceptSocket=accept(ListenSocket,NULL,NULL);
if(AcceptSocket==INVALID_SOCKET)
{
wprintf(L "accept failed with error:%ld\n",WSAGetLastError());
closesocket(ListenSocket);
WSACleanup();
return 1 ;
}
else
wprintf(L "Clientconnected.\n");
//Nolongerneedserversocket
closesocket(ListenSocket);
WSACleanup();
return 0 ;
}

熱點內容
2008編程入門經典 發布:2025-07-15 18:58:44 瀏覽:602
艾派密碼是什麼 發布:2025-07-15 18:47:40 瀏覽:587
密碼鎖如何在裡面開門 發布:2025-07-15 18:35:00 瀏覽:520
額溫演算法 發布:2025-07-15 18:18:14 瀏覽:727
ie客戶端事件腳本執行異常 發布:2025-07-15 18:10:13 瀏覽:24
自製壓縮兔糧 發布:2025-07-15 18:09:25 瀏覽:11
腳本病毒的危害 發布:2025-07-15 18:04:00 瀏覽:259
簡單的解壓 發布:2025-07-15 17:42:25 瀏覽:148
lol最強腳本 發布:2025-07-15 17:41:45 瀏覽:290
安卓手機測量工具在哪裡 發布:2025-07-15 17:41:39 瀏覽:241