Linux基础之tcp socket 简单通信例程

来源:互联网 发布:java 日历选择控件 编辑:程序博客网 时间:2024/05/18 02:16

服务器程序:

#include <sys/types.h>#include <sys/socket.h>#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <unistd.h>#include <netinet/in.h>#define SERVPORT 3333#define BACKLOG 10#define MAX_CONNECTED_NO 10#define MAXDATASIZE 10int main(){struct sockaddr_in server_sockaddr,client_sockaddr;int sin_size,recvbytes;int sockfd,client_fd;char buf[MAXDATASIZE];if((sockfd = socket(AF_INET,SOCK_STREAM,0))==-1){//新建一个socket,成功则返回socket的id并赋值给sockfdperror("socket");exit(1);}printf("socket success!,sockfd=%d\n",sockfd);bzero(&(server_sockaddr),sizeof(struct sockaddr_in));server_sockaddr.sin_family=AF_INET;//对服务器的socket地址进行配置server_sockaddr.sin_addr.s_addr=htonl(INADDR_ANY);//具体的用法参考INADDR_ANY的用法,下一篇博文server_sockaddr.sin_port=htons(SERVPORT);if(bind(sockfd,(struct sockaddr *)&server_sockaddr,sizeof(struct sockaddr))==-1){  //将服务器的ip及端口和刚建socket绑定perror("bind");exit(1);}printf("bind success!\n");if(listen(sockfd,BACKLOG)==-1){//设置允许的最大的客户端连接数perror("listen");exit(1);}printf("listening....\n");//while(1)//{sin_size=sizeof(struct sockaddr_in);if((client_fd=accept(sockfd,(struct sockaddr *)&client_sockaddr,&sin_size))==-1){   //等待客户端连接perror("accept");printf("%d\n",client_fd);exit(1);}if((recvbytes=recv(client_fd,buf,MAXDATASIZE,0))==-1){                           //接受数据perror("recv");exit(1);} printf("received a connection:%s",buf);printf("over");//}close(sockfd);}


客服端程序:

#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <netdb.h>#include <sys/types.h>#include <netinet/in.h>#include <sys/socket.h>#define SERVPORT 3333#define MAXDATASIZE 100main(int argc,char *argv[]){int sockfd,sendbytes;char buf[MAXDATASIZE];struct hostent *host;struct sockaddr_in serv_addr;if(argc < 2){fprintf(stderr,"Please enter the server's hostname!\n");exit(1);}printf("have enter the server's hostname!\n");if((host=gethostbyname(argv[1]))==NULL){perror("gethostbyname");exit(1);}printf("have enter the server's hostname!%d\n",*(host->h_name));if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){perror("socket");exit(1);}bzero(&(serv_addr),sizeof(struct sockaddr));serv_addr.sin_family=AF_INET;serv_addr.sin_port=htons(SERVPORT);serv_addr.sin_addr.s_addr = inet_addr(argv[1]);if(connect(sockfd,(struct sockaddr *)(&serv_addr),sizeof(struct sockaddr))==-1){perror("connect");exit(1);}printf("the server's hostname!%d\n",sockfd);if((sendbytes=send(sockfd,"hello",5,0))==-1){perror("send");exit(1);}printf("hostname!%d\n",sockfd);close(sockfd);}