网络编程(传结构体)

2021/7/20 14:07:03

本文主要是介绍网络编程(传结构体),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

内容同上篇:网络编程 - 西北小蚂蚁 - 博客园 (cnblogs.com)但在上一篇的基础上由只能传字符型到可以传结构体。

一、服务器代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <netinet/ip.h>
#include <unistd.h>
#include <arpa/inet.h>


#define N 64

struct tcp
{
    int len;
    char buf[N];
}QY = {0,"0"};


int main()
{
    //创建socket套接字
    int sfd = socket(AF_INET,SOCK_STREAM,0);
    if(-1 == sfd)
    {
        perror("socket");
        return -1;
    }


    //设置存储IP PORT变量//PORT用来区分进程
    struct sockaddr_in sddr,cddr;
    sddr.sin_family        = AF_INET;
    sddr.sin_port        = htons(6666);//PORT用来区分进程一般来说大于5000
    sddr.sin_addr.s_addr = inet_addr("0.0.0.0");//自动分配IP//也可以自己设置
    int len = sizeof(cddr);


    //把IP PORT和套接字绑定
    if(-1 == bind(sfd,(void *)&sddr,sizeof(sddr)))
    {
        perror("bind");
        return -1;
    }

    //监听套接字
    if(-1 == listen(sfd,10))
    {
        perror("listen");
        return -1;
    }
    puts("listen...");

    //创建连接
    int nfd = accept(sfd,(void *)&cddr,&len);
    if(-1 == nfd)
    {
        perror("accept");
        return -1;
    }

    while(1)
    {
        read(nfd,&QY,N);
        printf("%d\n",QY.len);
        puts(QY.buf);
        write(nfd,&QY,N);
    }

}

 

二、客户端代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <netinet/ip.h>
#include <unistd.h>
#include <arpa/inet.h>

#define N 64



struct tcp
{
    int len;
    char buf[N];
}QY = {211,"0"};


int main(int argc,char *argv[])
{
    if(3 > argc)
    {
        printf("argv: %s <IP> <PORT>\n",argv[0]);
        return -1;
    }

    int cfd = socket(AF_INET,SOCK_STREAM,0);
    if(-1 == cfd)
    {
        perror("socket");
        return -1;
    }

    //设置服务器的IP PORT
    struct sockaddr_in sddr;
    sddr.sin_family        = AF_INET;
    sddr.sin_port        = htons(atoi(argv[2]));
    sddr.sin_addr.s_addr= inet_addr(argv[1]);

    //连接服务器
    if(-1 == connect(cfd,(void *)&sddr,sizeof(sddr)))
    {
        perror("connect");
        return -1;
    }

    while(1)
    {
        fgets(QY.buf,N,stdin);
        write(cfd,&QY,N);
        read(cfd,&QY,N);

        printf("%d",QY.len);
        puts(QY.buf);
    }

}

 



这篇关于网络编程(传结构体)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程