青少年计算机编程c语言,C语言Socket编程(计算机网络作业)

本文介绍了如何使用C语言实现基于Socket的简单客户端-服务器通信。代码展示了如何创建Socket,进行连接、监听、接收和发送数据。在服务器端,代码监听特定端口并接收客户端消息,而在客户端则连接服务器并发送消息。同时,强调了错误检查的重要性,确保程序稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近我计算机网络课程要做作业了,没办法跟着老师一步一步的写C语言的代码,使用的计算就是Socket通信发送消息;代码实现的功能很简单,客户端向服务器端发送消息,服务器端接收客户端发来的消息,并且输出显示到屏幕上;代码中的每个socket方法的返回值都应该做判断出错情况,例如:创建SOCKET的创建的时候s句柄(或对象),需要判断返回值是否为INVALID_SOCKET,以及socket的所有操作的返回值是否为SOCKET_ERROR,以保证程序的稳定性,这里只是测试代码。

老师是录制的视频讲解的,其他其中使用的到的方法要求我们自己去查相关的MSDN资料库,如果有不懂的,就自己上网查。

服务器端接收代码:

#include

#pragma comment(lib,"Ws2_32.lib")

#include

#include

void main()

{

WSAData wsd;

WSAStartup(MAKEWORD(2,0),&wsd);

SOCKET s =NULL;

s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

struct sockaddr_in ch;

memset(&ch,0,sizeof(ch));

ch.sin_family=AF_INET;

ch.sin_addr.s_addr=INADDR_ANY;

ch.sin_port=htons(1041);

int b=bind(s,(struct sockaddr *) &ch,sizeof(ch));

#define QUEUE_SIZE 5

int l=listen(s,QUEUE_SIZE);

printf("正在监听本机的1041端口!

");

SOCKET sc=accept(s,0,0);

printf("客户端已经连接到本机的1041端口!

");

#define BUF_SIZE 4096

int receByt=0;

while(1)

{

char buf[BUF_SIZE];

receByt=recv(sc,buf,BUF_SIZE,0);

buf[receByt]=' ';

if(receByt>0)

{

printf("接收的消息是:%s

",buf);

}

else

{

printf("接收消息结束!");

break;

}

}

int ic=closesocket(sc);

int is=closesocket(s);

}

======================================================

客户端发送的代码:

#include

#pragma comment(lib,"Ws2_32.lib")

#include

#include

#include

void main()

{

WSAData wsd;

WSAStartup(MAKEWORD(2,0),&wsd);

SOCKET s =NULL;

s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

struct sockaddr_in ch;

memset(&ch,0,sizeof(ch));

ch.sin_family=AF_INET;

ch.sin_addr.s_addr=inet_addr("127.0.0.1");

ch.sin_port=htons(1041);

int c=connect(s,(struct sockaddr *) &ch,sizeof(ch));

printf("已经连接到服务器的1041端口!现在可以向服务器发送消息了!

");

#define BUF_SIZE 4096

char info[1024],buf[BUF_SIZE];

while(1)

{

gets(info);

if(info[0]==' ')

break;

strcpy(buf,info);

int nsend=send(s,buf,strlen(buf),0);

}

int ic=closesocket(s);

}

========================================================================

程序代码经过了优化,并且整合多线程,把接收和发送放到同一个文件中,使用参数模式调用发送和接收模块。增加了创建SOCKET的创建的时候s句柄(或对象)判断返回值是否为INVALID_SOCKET,以及socket的bind操作的返回值是否为SOCKET_ERROR,其他socket的操作应该也判断SOCKET_ERROR,以保证程序的稳定性,这里只是测试代码就不去写这么多了,剩下的就由你个人发挥。

#include

#pragma comment(lib,"Ws2_32.lib")#include#include#include#include

voidReceive();voidSend();voidcreatThread();

SOCKET s=NULL;

pthread_t t[1000];int threadCount=0;void main(int argc,char*argv[])

{

printf("本程序制作人学号:713901040041");

printf("程序说明:服务器端和客户端为同一个程序,请使用不同的参数运行.");

printf("接收程序请使用 r参数;发送程序请使用 s参数。");//printf("len : %d

", argc);//printf("count %d

",argc);//printf("value: %s

",argv[1]);//printf("%d",argv[1][0]=='r');

if(argc<=1)

{

printf("please input program arguments ...");

exit(0);

}if(argc>1 && argv[1][0]=='r')

{

printf("run receive ...");

Receive();

}if(argc>1 && argv[1][0]=='s')

{

printf("run send ...");

Send();

}

}void* receiveWork(void *args)

{

SOCKET sc=accept(s,0,0);if(sc==INVALID_SOCKET)

{

printf("sc Error");

}

creatThread();

printf("----------客户端已经连接到本机的%d线程连接!",threadCount-2);#define BUF_SIZE 4096

int receByt=0;while(1)

{charbuf[BUF_SIZE];

receByt=recv(sc,buf,BUF_SIZE,0);

buf[receByt]='

内容概要:本文档主要介绍了Intel Edge Peak (EP) 解决方案,涵盖从零到边缘高峰的软件配置和服务管理。EP解决方案旨在简化客户的入门门槛,提供一系列工具和服务,包括Edge Software Provisioner (ESP),用于构建和缓存操作系统镜像和软件栈;Device Management System (DMS),用于远程集群或本地集群管理;以及Autonomous Clustering for the Edge (ACE),用于自动化边缘集群的创建和管理。文档详细描述了从软件发布、设备制造、运输、安装到最终设备激活的全过程,并强调了在不同应用场景(如公共设施、工业厂房、海上油井和移动医院)下的具体部署步骤和技术细节。此外,文档还探讨了安全设备注册(FDO)、集群管理、密钥轮换和备份等关键操作。 适合人群:具备一定IT基础设施和边缘计算基础知识的技术人员,特别是负责边缘设备部署和管理的系统集成商和运维人员。 使用场景及目标:①帮助系统集成商和客户简化边缘设备的初始配置和后续管理;②确保设备在不同网络环境下的安全启动和注册;③支持大规模边缘设备的自动化集群管理和应用程序编排;④提供详细的密钥管理和集群维护指南,确保系统的长期稳定运行。 其他说明:本文档是详细描述了Edge Peak技术及其应用案例。文档不仅提供了技术实现的指导,还涵盖了策略配置、安全性和扩展性的考虑,帮助用户全面理解和实施Intel的边缘计算解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值