| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4814 人关注过本帖
标题:c#socket如何在客户端和服务器之间传送结构体型的数据?
取消只看楼主 加入收藏
lianjiecuowu
Rank: 3Rank: 3
来 自:安徽
等 级:论坛游侠
帖 子:152
专家分:107
注 册:2011-5-20
结帖率:85.71%
收藏
已结贴  问题点数:20 回复次数:1 
c#socket如何在客户端和服务器之间传送结构体型的数据?
我在做一个项目,其中涉及到c#网络编程中的通信,想要在客户端和服务器之间利用socket实现信息响应与应答,但是之前只是用socket传递过字符串型的数据,现在定义的是一个结构体,我想用socket面向连接的方式实现传送结构体,请各位大神帮忙指点一下,谢谢各位,是c#哦
搜索更多相关主题的帖子: 如何 字符串 结构体 socket 
2013-04-27 09:48
lianjiecuowu
Rank: 3Rank: 3
来 自:安徽
等 级:论坛游侠
帖 子:152
专家分:107
注 册:2011-5-20
收藏
得分:0 
同志们,讨论的很热烈,但是没有我预期的回答,


客户端程序:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <netdb.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <signal.h>

struct test
{char        *t1;
char        *t2;
} cli;

int main()
{
        int        n, fd;
        struct        sockaddr_in        addr;
        FILE        *fp;
        char        ipbuf[256], portbuf[256], buf[256];

        fp = fopen("/etc/ip.ini", "r");
        fgets(ipbuf, sizeof(ipbuf), fp);
        fgets(portbuf, sizeof(portbuf), fp);
        fclose(fp);

        cli.t1 = "abc";
        cli.t2 = "def";
        addr.sin_family = AF_INET;
        addr.sin_port = atoi(portbuf);
        addr.sin_addr.s_addr = inet_addr(ipbuf);

        fd = socket(AF_INET, SOCK_STREAM, 0);
        connect(fd, (struct sockaddr *)&addr, sizeof(addr));
        send(fd, &cli, sizeof(cli), 0);
        //recv(fd, buf, sizeof(buf), 0);
        close(fd);
        exit(0);
}

服务端程序:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <signal.h>
#include <netdb.h>

struct test
{char        *t1;
char        *t2;
}ser;

int main()
{
        int        serfd, clifd;
        int        n, serlen, clilen;
        struct        sockaddr_in        seraddr, cliaddr;
        FILE        *fp;
        char        ipbuf[256], portbuf[256], buf[25];
               
        fp = fopen("/etc/ip.ini", "r");
        fgets(ipbuf, sizeof(ipbuf), fp);
        fgets(portbuf, sizeof(portbuf), fp);
        fclose(fp);

        seraddr.sin_family = AF_INET;
        seraddr.sin_port = atoi(portbuf);
        seraddr.sin_addr.s_addr = inet_addr(ipbuf);
        
        serfd = socket(AF_INET, SOCK_STREAM, 0);
        bind(serfd, (struct sockaddr *)&seraddr, sizeof(seraddr));
        
        listen(serfd, 10);
        signal(SIGCHLD, SIG_IGN);

        while(1){
                clilen = sizeof(cliaddr);
                clifd = accept(serfd, (struct sockaddr *)&cliaddr, &clilen);
                if(fork() == 0) {
                        close(serfd);
                        n = recv(clifd, &ser, sizeof(struct test), 0);
                        //fprintf(stderr, "%d", n);
                        fprintf(stderr, "%s", ser.t1);
                        close(clifd);
                        exit(0);
                }
                else
                        close(clifd);
        }
}
这是我在网上找的程序,但是不是c#的,大家可有灵感?

Sharp your mind!
2013-04-27 21:02
快速回复:c#socket如何在客户端和服务器之间传送结构体型的数据?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024810 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved