----------------------------------------------------------------- #include<sys/socket.h> int socket(int family,int type,int protocol); 返回:非負描述字---成功 -1---失敗 ----------------------------------------------------------------- |
PS: ----------------------------------------------------------------- 個人一般用到的就是 if((socket_fd=socket(AF_INET,SOCK_STREAM,0)) == -1 ) perror("...."); if((socket_fd=socket(AF_INET,SOCK_DGRAM,0)) == -1 ) perror("...."); ----------------------------------------------------------------- |
----------------------------------------------------------------- #include<sys/socket.h> int connect(int sockfd,const struct sockaddr * servaddr,socklen_t addrlen); 返回:0---成功 -1---失敗 ----------------------------------------------------------------- |
------------------------------------------------------------------ struct in_addr { in_addr_t s_addr; }; struct sockaddr_in { uint8_t sin_len; sa_family_t sin_family; in_port_t sin_port; struct in_addr sin_addr; char sin_zero[8]; }; ------------------------------------------------------------------- |
PS: ------------------------------------------------------------------ struct sockaddr_in dest; bzero(&dest, sizeof(dest)); dest.sin_family = AF_INET; dest.sin_port = htons(port);//port就是指定的服務(wù)器ip,以及通信的端口 if (inet_aton(ip, (struct in_addr *) &dest.sin_addr.s_addr) == 0) { perror(ip); exit(errno); } if (connect(sockfd, (struct sockaddr *) &dest, sizeof(dest)) != 0) { perror("Connect error\n"); exit(errno); } ------------------------------------------------------------------- |
------------------------------------------------------------------- #include<sys/socket.h> int bind(int sockfd,const struct sockaddr * myaddr,socklen_t addrlen); 返回:0---成功 -1---失敗 ------------------------------------------------------------------- |
PS: ------------------------------------------------------------------- struct sockaddr_in server_address; server_sockfd = socket(AF_INET, SOCK_STREAM, 0); server_address.sin_family = AF_INET; server_address.sin_addr.s_addr = htonl(INADDR_ANY); server_address.sin_port = htons(9734); server_len = sizeof(server_address); bind(server_sockfd, (struct sockaddr *)&server_address, server_len); ------------------------------------------------------------------- |
------------------------------------------------------------------- #include<sys/socket.h> int listen(int sockfd,int backlog); 返回:0---成功 -1---失敗 ------------------------------------------------------------------- |
PS: ------------------------------------------------------------------- listen(sockfd,5); ------------------------------------------------------------------- |
------------------------------------------------------------------- #include<sys/socket.h> int accept(int sockfd,struct sockaddr * cliaddr,socklen_t * addrlen); 回:非負描述字---成功 -1---失敗 ------------------------------------------------------------------- |
PS: ------------------------------------------------------------------- struct sockaddr_in client_address; client_len = sizeof(client_address); client_sockfd = accept(server_sockfd, (struct sockaddr *)&client_address, &client_len); ------------------------------------------------------------------- |
------------------------------------------------------------------- #include<sys/inet.h> int inet_pton(int family,const char * strptr,void * addrptr); 返回:1---成功 0---輸入不是有效的表達格式 -1---失敗 int inet_aton(const char *strptr, struct in_addr *inp); ------------------------------------------------------------------- |
------------------------------------------------------------------- #include const char * inet_ntop(int family,const void * addrptr,char * strptr,size_t len); 返回:指向結(jié)果的指針---成功 NULL---失敗 ------------------------------------------------------------------- |
------------------------------------------------------------------- #include<unistd.h> pid_t fork(void); 返回:在子進程中為0,在父進程中為子進程ID -1---失敗 ------------------------------------------------------------------- |
------------------------------------------------------------------- #include #include #include #include #include #include #include #include int main(int argc,char *argv[]) { int sockfd,numbytes; char buf[100]; struct hostent *he; struct sockaddr_in their_addr; int i = 0; //將基本名字和地址轉(zhuǎn)換 he = gethostbyname(argv[1]); //建立一個TCP套接口 if((sockfd = socket(AF_INET,SOCK_STREAM,0))==-1) { perror("socket"); exit(1); } //初始化結(jié)構(gòu)體,連接到服務(wù)器的2323端口 their_addr.sin_family = AF_INET; their_addr.sin_port = htons(2323); their_addr.sin_addr = *((struct in_addr *)he->h_addr); bzero(&(their_addr.sin_zero),8); //和服務(wù)器建立連接 if(connect(sockfd,(struct sockaddr *)&their_addr, sizeof(struct sockaddr)) ==-1){ perror("connect"); exit(1); } //向服務(wù)器發(fā)送字符串"hello!" if(send(sockfd,"hello!",6,0)==-1) { perror("send"); exit(1); } //接受從服務(wù)器返回的信息 if((numbytes = recv(sockfd,buf,100,0))==-1) { perror("recv"); exit(1); } buf[numbytes] = ''; printf("result:%s",buf); close(sockfd); return 0; } -------------------------------------------------------------------- #include #include #include #include #include #include #include #include main() { int sockfd,new_fd; struct sockaddr_in my_addr; struct sockaddr_in their_addr; int sin_size; //建立TCP套接口 if((sockfd = socket(AF_INET,SOCK_STREAM,0))==-1) { perror("socket"); exit(1); } //初始化結(jié)構(gòu)體,并綁定2323端口 my_addr.sin_family = AF_INET; my_addr.sin_port = htons(2323); my_addr.sin_addr.s_addr = INADDR_ANY; bzero(&(my_addr.sin_zero),8); //綁定套接口 if(bind(sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr))==-1) { perror("bind"); exit(1); } //創(chuàng)建監(jiān)聽套接口 if(listen(sockfd,10)==-1) { perror("listen"); exit(1); } //等待連接 while(1) { sin_size = sizeof(struct sockaddr_in); perror("server is run"); //如果建立連接,將產(chǎn)生一個全新的套接字 if((new_fd = accept(sockfd,(struct sockaddr *) &their_addr,&sin_size))==-1) { perror("accept"); exit(1); } //生成一個子進程來完成和客戶端的會話,父進程繼續(xù)監(jiān)聽 if(!fork()) { //讀取客戶端發(fā)來的信息 if((numbytes = recv(new_fd,buff,strlen(buff),0))==-1) { perror("recv"); exit(1); } printf("%s",buff); //將從客戶端接收到的信息再發(fā)回客戶端 if(send(new_fd,buff,strlen(buff),0)==-1) perror("send"); close(new_fd); exit(0); } close(new_fd); } close(sockfd); } ------------------------------------------------------------------ |
root@linuxaid#gcc -o server server.c root@linuxaid#gcc -o client client.c |
歡迎光臨 (http://www.zg4o1577.cn/bbs/) | Powered by Discuz! X3.1 |