ubuntu_socket通信_g++编译

sever.cpp


#include  <unistd.h>
#include  <arpa/inet.h>       /* inet(3) functions */

    #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 PORT                4321
    #define BUFFER_SIZE            1024
    #define MAX_QUE_CONN_NM        5    


    int main()
    {
        struct sockaddr_in server_sockaddr,client_sockaddr;
        socklen_t sin_size,recvbytes;
        int sockfd,client_fd;
        char buf[BUFFER_SIZE];

        //建立socket连接
        if((sockfd = socket(AF_INET,SOCK_STREAM,0))==-1)
        {
            perror("socket");
            exit(1);
        }

        printf("Socket id = %d\n",sockfd);

        //设置sockaddr_in结构体中相关参数
        server_sockaddr.sin_family =AF_INET;
        server_sockaddr.sin_port=htons(PORT);
        server_sockaddr.sin_addr.s_addr=INADDR_ANY;
        bzero(&(server_sockaddr.sin_zero),8);

        int i=1;//允许重复使用本地址与套接字进行绑定
        setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&i,sizeof(i));
        //绑定函数bind
        if(bind(sockfd,(struct sockaddr *)&server_sockaddr,sizeof(struct sockaddr))==-1)
        {
            perror("bind");
            exit(1);
        }

        printf("Bind success!\n");
        //调用Listen函数,创建为处理请求的队列
        if(listen(sockfd,MAX_QUE_CONN_NM)==-1)
        {
            perror("listen");
            exit(1);
        }
        printf("Listening....\n");
        //调用accept()函数,等待客户端的连接
        if((client_fd=accept(sockfd,(struct sockaddr*)&client_sockaddr,&sin_size))==-1)
        {
            perror("accept");
            exit(1);
        }
        memset(buf,0,sizeof(buf));
        //调用recv()函数,接收客户端的请求
        if((recvbytes = recv(client_fd,buf,BUFFER_SIZE,0))==-1)
        {
            perror("recv");
            exit(1);
        }
        printf("Received a message: %s\n",buf);
        close(sockfd);
        //exit(0);
return 0;
    }

client.cpp


#include  <unistd.h>
#include  <arpa/inet.h>       /* inet(3) functions */
#include <netdb.h> /*gethostbyname function */
    #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 PORT            4321
    #define BUFFER_SIZE        1024

    int main(int argc,char *argv[])
    {
        int sockfd,sendbytes;
        char buf[BUFFER_SIZE];
        struct hostent *host;
        struct sockaddr_in serv_addr;

        if(argc<3)
        {
            fprintf(stderr,"USAGE:./client Hostname(or ip address) Text\n");
            exit(1);
        }
         //地址解析函数
        host=gethostbyname(argv[1]);
        if(host==NULL)
        {
            perror("gethostname");
            exit(1);
        }
         memset(buf,0,sizeof(buf));
         sprintf(buf,"%s",argv[2]);
         //创建socket
         if((sockfd =socket(AF_INET,SOCK_STREAM,0))==-1)
        {
             perror("socket");
             exit(1);
        }
        //设置sockaddr_in结构体中相关参数
        serv_addr.sin_family=AF_INET;
        serv_addr.sin_port=htons(PORT);
        serv_addr.sin_addr=*((struct in_addr*)host->h_addr);
        bzero(&(serv_addr.sin_zero),8);
        //调用connect函数主动发出对服务端的连接
        if(connect(sockfd,(struct sockaddr*)&serv_addr,sizeof(struct sockaddr))==-1)
        {
            perror("Connect");
            exit(1);
        }
        //发送消息给服务端
        if((sendbytes = send(sockfd,buf,strlen(buf),0))==-1)
        {
            perror("Send");
            exit(1);
        }
        close(sockfd);
        exit(0);
    }

编译

g++ sever.cpp -o sever

g++ client.cpp -o client


$ ./server

Socket id = 3

Bind success!

Listening....

Received a message: Hello,Server!

$ ./client localhost(或者输入IP地址) Hello,Server!

接收到后程序停止

http://www.eefocus.com/embedded/322834/r0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值