client和server簡單基礎版之建立套接字完成通訊
阿新 • • 發佈:2018-12-28
TCP建立套接字連結通訊,知識點學習如下連結:https://www.cnblogs.com/zhanggaofeng/p/5869053.html
- 客戶端程式碼
#include<sys/socket.h> #include<arpa/inet.h> #include<stdio.h> #include<string.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <errno.h> int main(int argc,char *argv[]) { //宣告套接字和套接字地址結構 int sockfd; struct sockaddr_in addr; if((sockfd=socket(AF_INET, SOCK_STREAM, 0))==-1){ printf("socket error!"); } bzero(&addr, sizeof(addr)); addr.sin_family=AF_INET; addr.sin_port=htons(8080); addr.sin_addr.s_addr=inet_addr("127.0.0.1"); if(connect(sockfd, (struct sockaddr*)&addr, sizeof(addr))==-1) { printf("connect failed ! error message :%s\n",strerror(errno)); } else printf("success"); close(sockfd); return 0; }
2
-
伺服器端程式碼
#include <stdio.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <unistd.h> #include <errno.h> #include <arpa/inet.h> #define PORT 8080 //埠號 #define BACKLOG 10 //所允許的連線數量 using namespace std; int main() { int socketfd,connectfd; //描述符 struct sockaddr_in server; //伺服器地址 struct sockaddr_in client; //客戶地址 socketfd=socket(AF_INET, SOCK_STREAM, 0); if(socketfd==-1) { printf("socket failed\n"); close(socketfd); return 0; } bzero(&server, sizeof(server)); //初始化 server.sin_family=AF_INET; //tcp套接字 server.sin_port=htons(PORT); //將埠轉換為網路字序 server.sin_addr.s_addr=htonl(INADDR_ANY); //核心選擇ip if(bind(socketfd, (struct sockaddr *)&server,sizeof(server))==-1) //將套接字繫結到指定的協議地址 { printf("Bind error\n"); close(socketfd); return 0; } if(listen(socketfd, BACKLOG)==-1) //監聽 (如果沒有請求,則被阻塞,進入休眠狀態) { printf("listen error\n"); close(socketfd); return 0; } socklen_t sin_size=sizeof(struct sockaddr_in); if ((connectfd=accept(socketfd, (struct sockaddr *)&client,&sin_size))==-1) //接收請求 { printf("connect failed ! error message :%s\n",strerror(errno)); close(socketfd); return 0; } printf("you got a connection form %s\n",inet_ntoa(client.sin_addr)); send(connectfd, "hello\n", 10, 0); //傳送資訊 close(connectfd); close(socketfd); return 0; }
在程式測試中曾遇到“connect failed ! error message :Socket operation on non-socket”錯誤,經百度除錯發現是由於在客戶端建立socket時“ if(listenfd= socket(AF_INET,SOCK_STREAM, 0)==-1) ”少寫了一個括號。加上程式就執行正確了。第一篇部落格,加油!