----------------------------------------------------------------- #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就是指定的服务器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); 返回:指向结果的指针---成功 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; //将基本名字和地址转换 he = gethostbyname(argv[1]); //建立一个TCP套接口 if((sockfd = socket(AF_INET,SOCK_STREAM,0))==-1) { perror("socket"); exit(1); } //初始化结构体,连接到服务器的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); //和服务器建立连接 if(connect(sockfd,(struct sockaddr *)&their_addr, sizeof(struct sockaddr)) ==-1){ perror("connect"); exit(1); } //向服务器发送字符串"hello!" if(send(sockfd,"hello!",6,0)==-1) { perror("send"); exit(1); } //接受从服务器返回的信息 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); } //初始化结构体,并绑定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); } //创建监听套接口 if(listen(sockfd,10)==-1) { perror("listen"); exit(1); } //等待连接 while(1) { sin_size = sizeof(struct sockaddr_in); perror("server is run"); //如果建立连接,将产生一个全新的套接字 if((new_fd = accept(sockfd,(struct sockaddr *) &their_addr,&sin_size))==-1) { perror("accept"); exit(1); } //生成一个子进程来完成和客户端的会话,父进程继续监听 if(!fork()) { //读取客户端发来的信息 if((numbytes = recv(new_fd,buff,strlen(buff),0))==-1) { perror("recv"); exit(1); } printf("%s",buff); //将从客户端接收到的信息再发回客户端 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.51hei.com/bbs/) | Powered by Discuz! X3.1 |