TCP通讯方式示例代码

#include<string.h>
#include<arpa/inet.h>
#include<stdio.h>
#include<netinet/in.h>
#include<bits/socket.h>
#include<sys/un.h>
#include<unistd.h>
#include<sys/socket.h>
#include<assert.h>
//sever
int main()
{
    int sockfd=socket(PF_INET,SOCK_STREAM,0);//创建socktet
    struct sockaddr_in ser,cli;//使用专用的sockaddr
    memset(&ser,0,sizeof(ser));//避免干扰
    ser.sin_family=AF_INET;//确定地址族
    ser.sin_port=htons(6000);//转换到网络大端字节序
    ser.sin_addr.s_addr=inet_addr("127.0.0.1");//设定IP地址
    int falg=bind(sockfd,(struct sockaddr*)&ser,sizeof(ser));//将自己设定的addr绑定到socket上
    assert(flag!=-1);
    listen(sockfd,5);//给socket设定监听队列完全连接状态的socket上限   此时sockfd变成监听socket
    char recvbuff[128]={0};
    socklen_t len=sizeof(cli);
    while(1)
    {
        int sockcli=accept(sockfd,(struct sockaddr *)&cli,&len);//返回远端连接socket以及socket地址

        if(socket<0)
        {
            continue;
        }
        while(1)
        {
            flag=recv(sockcli,recvbuff,128,0);//注意服务器端是被连接端,所以是先收   后发
            if(flag<=0)
                break;
            printf("cli:%s\n",recvbuff);
            send(sockcli,"accept success",128,0);
        }
        close(sockcli);
    }

    close(sockfd);
}
    
     

}

//cli

int main()
{
    int sockfd=socket(PF_INET,SOCK_STREAM,0);
    assert(sockfd!=-1);
    struct sockaddr_in ser;//指定要连接的服务器端的socket地址
    memset(&ser,0,sizeof(ser));
    ser.sin_family=AF_INET;
    ser.sin_port=htons(6000);
    ser.sin_addr.s_addr=inet_addr("127.0.0.1");
    int falg=connet(sockfd,(struct sockaddr *)&ser,sizeof(ser));//系统返回一个socket  ser指定服务器地址
    assert(flag!=-1);
    char recvbuff[128]={0};
    char sendbuff[128]={0};
    while(1)
    {
        printf("please input data:");
        scanf("%s",sendbuff);//scanf不能发送有空格的字符串   所以这里最好用gets
        send(sockfd,sendbuff,strlen(sendbuff)+1,0);
        recv(sockfd,recvbuff,128,0);
        printf("ser:%s",recvbuff);
    }
close(sockfd);
    
}

猜你喜欢

转载自blog.csdn.net/wm06260514/article/details/84073614