百科解釋
Linux C函數(shù)[編輯本段]connect(建立socket連線(xiàn)) 相關(guān)函數(shù) socket,bind,listen 表頭文件 #include<sys/types.h> #include<sys/socket.h> 定義函數(shù) int connect (int sockfd,struct sockaddr * serv_addr,int addrlen); 函數(shù)說(shuō)明 connect()用來(lái)將參數(shù)sockfd 的socket 連至參數(shù)serv_addr 指定的網(wǎng)絡(luò)地址。結(jié)構(gòu)sockaddr請(qǐng)參考bind()。參數(shù)addrlen為sockaddr的結(jié)構(gòu)長(zhǎng)度。 返回值 成功則返回0,失敗返回-1,錯(cuò)誤?虼嬗趀rrno中。 錯(cuò)誤代碼 EBADF 參數(shù)sockfd 非合法socket處理代碼 EFAULT 參數(shù)serv_addr指針指向無(wú)法存取的內(nèi)存空間 ENOTSOCK 參數(shù)sockfd為一文件描述詞,非socket。 EISCONN 參數(shù)sockfd的socket已是連線(xiàn)狀態(tài) ECONNREFUSED 連線(xiàn)要求被server端拒絕。 ETIMEDOUT 企圖連線(xiàn)的操作超過(guò)限定時(shí)間仍未有響應(yīng)。 ENETUNREACH 無(wú)法傳送數(shù)據(jù)包至指定的主機(jī)。 EAFNOSUPPORT sockaddr結(jié)構(gòu)的sa_family不正確。 EALREADY socket為不可阻斷且先前的連線(xiàn)操作還未完成。 范例 /* 利用socket的TCP client 此程序會(huì)連線(xiàn)TCP server,并將鍵盤(pán)輸入的字符串傳送給server。 TCP server范例請(qǐng)參考listen()。 */ #include<sys/stat.h> #include<fcntl.h> #include<unistd.h> #include<sys/types.h> #include<sys/socket.h> #include<netinet/in.h> #include<arpa/inet.h> #define PORT 1234 #define SERVER_IP “127.0.0.1” main() { int s; struct sockaddr_in addr; char buffer[256]; if((s = socket(AF_INET,SOCK_STREAM,0))<0){ perror(“socket”); exit(1); } /* 填寫(xiě)sockaddr_in結(jié)構(gòu)*/ bzero(&addr,sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port=htons(PORT); addr.sin_addr.s_addr = inet_addr(SERVER_IP); /* 嘗試連線(xiàn)*/ if(connect(s,&addr,sizeof(addr))<0){ perror(“connect”); exit(1); } /* 接收由server端傳來(lái)的信息*/ recv(s,buffer,sizeof(buffer),0); printf(“%s ”,buffer); while(1){ bzero(buffer,sizeof(buffer)); /* 從標(biāo)準(zhǔn)輸入設(shè)備取得字符串*/ read(STDIN_FILENO,buffer,sizeof(buffer)); /* 將字符串傳給server端*/ if(send(s,buffer,sizeof(buffer),0)<0){ perror(“send”); exit(1); } } } 執(zhí)行 $ ./connect Welcome to server! hi I am client! /*鍵盤(pán)輸入*/ /*<Ctrl+C>中斷程序*/
移動(dòng)通信網(wǎng) | 通信人才網(wǎng) | 更新日志 | 團(tuán)隊(duì)博客 | 免責(zé)聲明 | 關(guān)于詞典 | 幫助