码迷,mamicode.com
首页 > 其他好文 > 详细

一个TCP/IP通信的实例

时间:2016-02-12 16:20:22      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:

 1 /*服务器端*/
 2 #include<stdlib.h>
 3 #include<stdio.h>
 4 #include<string.h>
 5 #include<errno.h>
 6 #include<netdb.h>
 7 #include<sys/types.h>
 8 #include<netinet/in.h>
 9 #include<sys/socket.h>
10 #include<unistd.h>
11 
12 #define MAXSIZE 1024
13 
14 int main(int argc, char *argv[])
15 {
16     int sockfd,new_fd;
17     struct sockaddr_in server_addr;
18     struct sockaddr_in client_addr;
19     int sin_size,portnumber;
20     char buf[MAXSIZE];
21     if(argc!=2)
22     {
23         fprintf(stderr,"Usage :%s portnumber\a\n",argv[0]);
24         exit(1);
25     }
26     if((portnumber=atoi(argv[1]))<0)
27     {
28         fprintf(stderr,"Usage :%s protnumber\a\n",argv[0]);
29         exit(1);
30     }
31     if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
32     {
33         fprintf(stderr,"Socket error:%s\n\a",strerror(errno));
34         exit(1);
35     }
36 
37     bzero(&server_addr,sizeof(struct sockaddr_in));
38     server_addr.sin_family=AF_INET;
39     server_addr.sin_addr.s_addr=htonl(INADDR_ANY);
40     server_addr.sin_port=htons(portnumber);
41     if(bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1)
42     {
43         fprintf(stderr,"Bind error:%s\n\a",strerror(errno));
44         exit(1);
45     }
46     if(listen(sockfd,5)==-1)
47     {
48         fprintf(stderr,"Listen error:%s\n\a",strerror(errno));
49         exit(1);
50     }    
51     
52     while(1)
53     {
54         sin_size=sizeof(struct sockaddr_in);
55         if((new_fd=accept(sockfd,(struct sockaddr *)(&client_addr),&sin_size))==-1)
56         {
57             fprintf(stderr,"Accept error:%s\n\a",strerror(errno));
58             exit(1);
59         }
60         fprintf(stderr,"Server get connection from %d:\n",inet_ntoa(client_addr.sin_addr));
61         printf("Connect successful,please input the message [<1024 bytes]:\n");
62         if(fgets(buf,sizeof(buf),stdin)!=buf)
63         {
64             printf("fgets error!\n");
65             exit(1);
66         }
67         if(write(new_fd,buf,strlen(buf))==-1)
68         {
69             fprintf(stderr,"Write error!\n",strerror(errno));
70             exit(1);
71         }
72         close(new_fd);
73     }
74     close(sockfd);
75     exit(0);
76 }
/*客户端*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<errno.h>
#include<netdb.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>

int main(int argc, char *argv[])
{
    int sockfd;
    char buffer[1024];
    struct sockaddr_in server_addr;
    struct hostent *host;
    int portnumber,nbytes;
    if(argc!=3)
    {
        fprintf(stderr,"Usage:%s hostname portnumber\a\n0",argv[0]);
        exit(1);
    }
    if((host=gethostbyname(argv[1]))==NULL)
    {
        fprintf(stderr,"Gethostname error\n");
        exit(1);
    }
    if((portnumber=atoi(argv[2]))<0)
    {
        fprintf(stderr,"Usage:%s hostname portnumber\a\n",argv[0]);
        exit(1);
    }
    while(1)
    {
    if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
    {
        fprintf(stderr,"Socket Error:%s\a\n",strerror(errno));
        exit(1);
    }
    bzero(&server_addr,sizeof(server_addr));
    server_addr.sin_family=AF_INET;
    server_addr.sin_port=htons(portnumber);
    server_addr.sin_addr=*((struct in_addr *)host->h_addr);
    
    if(connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1)
    {
        fprintf(stderr,"Connect Error:%s\a\n",strerror(errno));
        exit(1);
    }
        if((nbytes=read(sockfd,buffer,1024))==-1)
        {
            fprintf(stderr,"Read Error:%s\a\n",strerror(errno));
            exit(1);
        }
    buffer[nbytes]=\0;
    printf("I have received:%s",buffer);
    close(sockfd);
    }
    exit(0);
}

程序的执行

gcc -o server_tcp server_tcp.c
gcc -o client_tcp client_tcp.c
在第一个shell端
./server_tcp 5678
在第二个shell端
./client_tcp localhost 5678

程序的执行结果

1 shell 1
2 Server get connection from 1995400920:
3 Connect successful,please input the message [<1024 bytes]:
4 jljgjglk
5 
6 
7 shell 2
8 I have received:jljgjglk

 

一个TCP/IP通信的实例

标签:

原文地址:http://www.cnblogs.com/wireless-dragon/p/5187090.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!