问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

...下套接字socket编程,求代码,实在写不出来。总出现各种各样的错误...

发布网友 发布时间:2024-10-19 22:36

我来回答

2个回答

热心网友 时间:2024-11-07 01:21

linux 编程一般都不会直接空敲代码的,比较熟练的程序员也要经常查man page的。所以,要有信心,有恒心。从基础做起,多看书,多练习。
你说的程序其实挺简单的,写一个,比较ugly,仅给楼主练习作参考。
tcpclient.c
#include "debug.h"

int main (int argc, char *argv[])
{
int cfd;
char buf[BUFSIZE];
struct sockaddr_in addr;
int addrlen = sizeof (addr);
int data[DATALEN] = { 0 };
int recv_data[DATALEN] = { 0 };
int i, j, n, average = 0;

if (argc < 2)
{
printf ("usage : %s server_ip server_port", argv[0]);
exit (0);
}
cfd = socket (PF_INET, SOCK_STREAM, 0);
check_err ("socket", cfd);

addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr (argv[1]);
addr.sin_port = htons (atoi (argv[2]));
connect (cfd, (struct sockaddr *)&addr, addrlen);
check_err ("socket", cfd);

for (i = 0; i < DATALEN; i++)
data[i] = i + 50;
for (i = 0; i < DATALEN; i++)
{
sprintf (buf, "%d", data[i]);
check_err ("write", write (cfd, buf, sizeof (buf)));
}
i = j = 0;
for (i = 0; i < DATALEN && read (cfd, buf, sizeof (buf)) > 0; i++)
{
if ((n = atoi (buf)) > 100)
{
recv_data[j++] = n;
printf ("recv data : %d\n", recv_data[i]);
average += n;
}
else
break;
}
average /= j;
printf ("\naverage = %d\n", average);

close (cfd);
return 0;
}

tcpserver.c
#include "debug.h"

int main (int argc, char *argv[])
{
int ret;
int sfd;
int cfd;
char buf[BUFSIZE];
struct sockaddr_in addr;
int len = sizeof (addr);
int recv_data[DATALEN] = {0};
int i, j, n;

if (argc < 2)
{
printf ("usage : %s port\n", argv[0]);
exit (-1);
}
sfd = socket (PF_INET, SOCK_STREAM, 0);
check_err ("socket", errno);

addr.sin_family = AF_INET;
addr.sin_port = htons (atoi (argv[1]));
addr.sin_addr.s_addr = INADDR_ANY;
bind (sfd, (struct sockaddr *)&addr, len);
check_err ("bind", errno);

listen (sfd, BACKLOG);
check_err ("listen", errno);

i = j = n = 0;
if ((cfd = accept (sfd, (struct sockaddr *)&addr, &len)) > 0)
{
for (i = 0; i < DATALEN && read (cfd, buf, BUFSIZE) > 0; i++)
{
if ((n = atoi (buf)) > 100)
recv_data[j++] = n;
}
}
for (i = 0; i < j; i++)
{
sprintf (buf, "%d", recv_data[i]);
check_err ("write", write (cfd, buf, sizeof(buf)));
}
check_err ("write", write (cfd, "0", sizeof(buf)));

close (cfd);
return 0;
}

debug.h
#ifndef _DEBUG_H
#define _DEBUG_H
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <errno.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <arpa/inet.h>

#define BACKLOG 10 // for max listen fds
#define DATALEN 100
#define BUFSIZE 16

#define check_err(name, ret) \
if (ret < 0) \
{ \
perror (name); \
exit (-1); \
}
#define check_null(name, ret) \
if (if ret == NULL) \
{ \
perror (name); \
exit (-1); \
}

#endif
编译后,先运行server端,然后运行client端,可以看到server发回的数据,及平均值。
百度知道不能贴代码,排版很差,将就可以看吧,有问题追问。

热心网友 时间:2024-11-07 01:13

这类问题不难,核心就是socket通信,你可以这样做试试:
1、先将client与server打通,例如client端发送一个数字server端可以接收
2、server端接收到后可以给client端一个回执
3、实现问题的要求
再加参考下老师的代码应该可以做到,这个跟操作系统的平台没有关系的
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 如何避免wps卡顿? 属鼠的男人找对象是属什么,属鼠的人和什么属相合 96年鼠的姻缘在哪年 属相相合年份运势提升 2024属鼠找对象属什么最佳 黑客攻击网站能报案吗 黑客攻击报案有用吗 我是2021年2月1号的车票要是回哈尔滨五常市还用集中隔离吗? 2021年从拉萨回黑龙江坐飞机需要隔离吗? 在套接字编程里常出现(struct sockaddr *)&amp;server,这个结构是什么意思... 境外回哈尔滨经历28天隔离获健康码已久 去外地旅游后再回哈尔滨 还需做... 我的世界从此以后多了一个你的歌名是什么 如何关闭饿了么的代金券活动呢? 请问黑2精灵宝可梦怎么用道具代码? 百年奋斗,全党必须铭记 百年奋斗全党必须铭记什么团结带领全国各族人民不断为美好生活而... ...添加—选择你想为其安装数据源的驱动程序,发现没有M... ...Access Driver(*.mdb)ODBC驱动程序的安装例程。请重新安装驱动_百度... ...是为 SQL Native Client安装数据源的驱动程序,而不是SQL Server,我... 我的系统DSN中没有驱动程序,点击添加,只有SQL server, 没有ACCESS,为什... 房地产营销如何策划 求会ps的哥哥姐姐改下图,把两张图片中那两个人的名字,分别改成 孙天泽... ps这种效果怎么做啊,求大哥大姐帮忙 前列腺结石的饮食禁忌 以前单位交5险一金,现在换单位了,只交3金,住房公积金可以提吗 DNF剑圣怎么配装备好。刷图伤害高,有抉择。不差钱。 前列腺炎增生伴结石怎么办 2021年国庆去哈尔滨会被隔离吗 如何在某个程序建立的套接字上发信息 《pokemon go》道馆怎么打 口袋妖怪go道馆完整玩法 木耳炒仔鸡怎么做 考研,选好大学差专业还是差大学好专业 黑木耳炒鸡块制作步骤 美国佐治亚大学入学条件 切原赤也的人气投票 请各位帮忙分析一下答案为什么?特别是R1与R2的关系,谢谢!!! 谁能帮忙分析并解答一下? 想在网上买一台屏大的电视,不知道哪里比较好。 和老婆炒嘴了,我们结婚十年了,一前是我对不起她,什么事也没管过,我也... 结婚十年了经常因为一些家庭琐事吵架,吵狠了他就会对我大打出手。有次... 结婚十年了,三天两头的吵架生气冷战,心里特别厌烦他,可他不在家的时候... 认识到结婚十年,和老婆吵架一个月多不理我,道歉哄劝都没用,不知道她... 和老婆吵架生气的说等孩子大点我们就离婚,结果老婆什么都没有说... 求一份最新的空白资产负债表和利润表 求一张空白的利润表 和资产负债表 急求~最新资产负债表 利润表 现金流量表空白的! 求最新空白资产负债表,利润表,急!