TCP socket communication examples client and Server

//server.c

#include <stdio.h>

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

#define BUFFSIZE 4096     

int main(int argc, char *argv[])
{
    const char* szwelcomestr="Welcome to my configure server.";

    int server_sockfd;//server socket
    int client_sockfd;//client socket
    int len;
    struct sockaddr_in my_addr;   //server addr 
    struct sockaddr_in remote_addr; //client addr 
    int sin_size;
    char buf[BUFFSIZE];  //buff to save data
    int nflag=1;

    memset(&my_addr,0,sizeof(my_addr)); //zero 
    my_addr.sin_family=AF_INET; //ip family  
    my_addr.sin_addr.s_addr= inet_addr("192.168.1.34");//binding server ip 
    my_addr.sin_port=htons(8000); //server port

    /*create server socket*/
    if((server_sockfd=socket(PF_INET,SOCK_STREAM,0))<0)
    {
        perror("socket");
        return 1;
    }

    /*bind*/
    if (bind(server_sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr))<0)
    {
        perror("bind");
        return 1;
    }

    /*listen num is 5*/
    listen(server_sockfd,5);

    sin_size=sizeof(struct sockaddr_in);

    /*accept ,wait client to arrive at*/
    if((client_sockfd=accept(server_sockfd,(struct sockaddr *)&remote_addr,&sin_size))<0)
    {
        perror("accept");
        return 1;
    }

    printf("accept client %s\n",inet_ntoa(remote_addr.sin_addr));
    len=send(client_sockfd,szwelcomestr,strlen(szwelcomestr),0);//send the welcome information

    /*receive the data from client, and send back to it*/
    while((len=recv(client_sockfd,buf,BUFFSIZE,0)) > 0)
    {
        printf("reve data %s,len=%d\n",buf, len);

        if(send(client_sockfd,buf,len,0)<0)
        {
            perror("write");
            return 1;
        }
        //clear the buff
        memset(buf, 0, sizeof(buf));
    }

    close(client_sockfd);
    close(server_sockfd);

    return 0;

}

//client.c

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int main(int argc, char *argv[])
{
    int client_sockfd;
    int len;
    struct sockaddr_in remote_addr; //server address
    char buf[BUFSIZ];  //buff definition
    memset(&remote_addr,0,sizeof(remote_addr)); //set zero 
    remote_addr.sin_family=AF_INET; //IPfamily
    remote_addr.sin_addr.s_addr=inet_addr("192.168.1.34");//server IP to link 
    remote_addr.sin_port=htons(8000); //server port to link 

    /*create the socket for tcp stream*/
    if((client_sockfd=socket(PF_INET,SOCK_STREAM,0))<0)
    {
        perror("socket");
        return 1;
    }

    /*collect to the server socket*/
    if(connect(client_sockfd,(struct sockaddr *)&remote_addr,sizeof(struct sockaddr))<0)
    {
        perror("connect");
        return 1;
    }
    printf("connected to server \n");
    len=recv(client_sockfd,buf,BUFSIZ,0);//receive the server data 
    buf[len]='\0';
    printf("%s",buf); //print the server welcom banner

    /*loop the send the string and print the received data, exit to quit the loop*/
    while(1)
    {
        printf("Enter string to send:");
        scanf("%s",buf);
        if(strcmp(buf,"exit") ==0)
            break;

        printf("client to send %s,length of buf is %d\n", buf,strlen(buf));

        len=send(client_sockfd,buf,strlen(buf),0);
        len=recv(client_sockfd,buf,BUFSIZ,0);
        buf[len]='\0';
        printf("received:%s\n",buf);
    }
    close(client_sockfd);//close the socket 
    return 0;
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值