《linux c socket 程式設計(一)》
《linux c socket 程式設計(二)》
《linux c socket 程式設計(三)》
tcpserver
socket bind listen accept write read(send recv) close
tcpclient
socket connect write read (send recv) close
udpserver
socket bind sendto recvfrom close
udpclient
socket sendto recvfrom close
上面是socket網路程式設計中常用的函式,接下來寫**:
tcpserver:
#include #include #include #include #include #include #define buf_size 1024
int main(int argc, char *argv)
/*將套接字繫結到伺服器的網路位址上*/
if (bind(server_sockfd,(struct sockaddr *)&server_addr,sizeof(struct sockaddr))<0)
/*監聽連線請求--監聽佇列長度為5*/
listen(server_sockfd,5);
sin_size=sizeof(struct sockaddr_in);
/*等待客戶端連線請求到達*/
if((client_sockfd=accept(server_sockfd,(struct sockaddr *)&client_addr,&sin_size))<0)
printf("accept client %s\n",inet_ntoa(client_addr.sin_addr));
nlen=send(client_sockfd,"welcome to my server\n",21,0);//傳送歡迎資訊
/*接收客戶端的資料並將其傳送給客戶端--recv返回接收到的位元組數,send返回傳送的位元組數*/
while((nlen=recv(client_sockfd,buf,buf_size,0))>0)
} close(client_sockfd);
close(server_sockfd);
return 0;
}
tcpclient
#include #include #include #include #include #include #include #define buf_size 1024
int main(int argc, char *argv)
/*將套接字繫結到伺服器的網路位址上*/
if(connect(client_sockfd,(struct sockaddr *)&server_addr,sizeof(struct sockaddr))<0)
printf("connected to server\n");
nlen=recv(client_sockfd,buf,buf_size,0);//接收伺服器端資訊
buf[nlen]='\0';
printf("%s",buf); //列印伺服器端資訊
/*迴圈的傳送接收資訊並列印接收資訊--recv返回接收到的位元組數,send返回傳送的位元組數*/
while(1)
nlen=send(client_sockfd,buf,strlen(buf),0);
nlen=recv(client_sockfd,buf,buf_size,0);
buf[nlen]='\0';
printf("received:%s\n",buf);
} close(client_sockfd);//關閉套接字
return 0;
}
udpserver
#include #include #include #include #include #include #include #define buf_size 1024
int main(int argc, char *argv)
/*將套接字繫結到伺服器的網路位址上*/
if (bind(server_sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr))<0)
sin_size=sizeof(struct sockaddr_in);
printf("waiting for a packet...\n");
/*接收客戶端的資料並將其傳送給客戶端--recvfrom是無連線的*/
if((nlen=recvfrom(server_sockfd,buf,buf_size,0,(struct sockaddr *)&remote_addr,&sin_size))<0)
printf("received packet from %s:\n",inet_ntoa(remote_addr.sin_addr));
buf[nlen]='\0';
printf("contents: %s\n",buf);
close(server_sockfd);
return 0;
}
udpclient
#include #include #include #include #include #include #include #define buf_size 1024
int main(int argc, char *argv)
strcpy(buf,"this is a test message");
printf("sending: '%s'\n",buf);
sin_size=sizeof(struct sockaddr_in);
/*向伺服器傳送資料報*/
if((nlen=sendto(client_sockfd,buf,strnlen(buf),0,(struct sockaddr *)&server_addr,sizeof(struct sockaddr)))<0)
close(client_sockfd);
return 0;
}
460952208 linux c socket程式設計
這裡主要是 網上有原理 socket 有同步,非同步之分,我這是個同步的,同步又有阻塞和非阻塞之分,這的非阻塞是用select 函式實現的 客戶端 include include include include include include include include include incl...
linux c socket程式設計
ntohl 與 htonl 相反的過程 ntohs 與htons 相反的過程 inet addr char 點分十進位制轉化為整型 inet nota int 整型轉化為點分十進位制 主機位元組序 和 網路位元組序 當主機位元組序埠號位為 0x1234 那麼 網路位元組序就為 0x12 0x34 如...
linux C socket程式設計
這是乙個關於socket的題 要求你自己寫乙個socket程式,然後解析客戶端從瀏覽器位址列提交的資料。要求 在瀏覽器中輸入http localhost 8500 後,你的socket程式向瀏覽器返回乙個網頁,以後就用這個網頁向你寫得這個socket程式提交資料,你的socket程式負責解析這些資料...