服务器往客户端发送字符串的网络编程

服务器主要就是能够打开命令行提供的网络端口,然后一有客户端连接上,就会向客户端发送Welcome to Our Server!这段话。
服务器代码serverSayWelcome.c的代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
// 输出错误并且向操作系统返回1,退出程序
void errorPrint(char *errorMessage);int main(int argc,char *argv[]){// 服务器的套接字int serverSocket;// 客户端的套接字int clientSocket;// 服务器的地址结构struct sockaddr_in serverAddress;// 客户端的地址结构struct sockaddr_in clientAddress;// 客户端地址大小socklen_t clientAddress_size;// 输出到客户端的字符串char stringToClient[] = "Welcome to Our Server!";// 命令行需要输入两个参数,第二个参数需要输入端口号if(argc!=2){printf("%s needs a port!\n",argv[0]);exit(1);}// 获取服务器端的套接字serverSocket = socket(PF_INET,SOCK_STREAM,0);// 若是serverSocket等于-1,就说明出错了,需要输出"socket() wrong!"退出程序if(serverSocket==-1){errorPrint("socket() wrong!");}// 把serverAddress所有字节都填充为0memset(&serverAddress,0,sizeof(serverAddress));// 把sockaddr_in的值初始化serverAddress.sin_family = AF_INET;serverAddress.sin_addr.s_addr = htonl(INADDR_ANY);serverAddress.sin_port = htons(atoi(argv[1]));// 把地址和端口都绑定在操作系统上边,要是失败的话,会输出错误信息,退出程序if(bind(serverSocket,(struct sockaddr*)&serverAddress,sizeof(serverAddress))==-1){errorPrint("bind() wrong!");}// 把主动套接字变成被动套接字,能够监听其他主机发起连接,失败的话,会输出错误信息,退出程序if(listen(serverSocket,5)==-1){errorPrint("listen() wrong!");}// 把客户端地址大小clientAddress_size初识化clientAddress_size = sizeof(clientAddress);// 接受到其他用户的连接,clientSocket = accept(serverSocket,(struct sockaddr*) &clientAddress,&clientAddress_size);// 出错之后,会输出报错信息,退出程序if(clientSocket==-1){errorPrint("accept() wrong!");}// 向客户端输出“Welcome to Our Server!”write(clientSocket,stringToClient,sizeof(stringToClient));// 关闭客户端套接字close(clientSocket);// 关闭服务器套接字close(serverSocket);return 0;
}void errorPrint(char *errorMessage){fputs(errorMessage,stderr);fputc('\n',stderr);exit(1);
}

gcc serverSayWelcome.c -o serverSayWelcome进行编译,./serverSayWelcome 9190打开9190端口等待客户端连接。
在这里插入图片描述

客户端就会连接服务器,然后把string from server:连上服务器发送过来的Welcome to Our Server!字符串输出。
客户端代码clientGetWelcome.c的代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
void errorPrint(char *errorMessage);int main(int argc,char *argv[]){int socketNumber;struct sockaddr_in serverAddress;char getString[100];int stringLength;if(argc!=3){printf("server IP or port lacks!\n",argv[0]);exit(1);}socketNumber = socket(PF_INET,SOCK_STREAM,0);if(socketNumber==-1){errorPrint("socket() is wrong!");exit(1);}memset(&serverAddress,0,sizeof(serverAddress));serverAddress.sin_family=AF_INET;serverAddress.sin_addr.s_addr=inet_addr(argv[1]);serverAddress.sin_port=htons(atoi(argv[2]));if(connect(socketNumber,(struct sockaddr*)&serverAddress,sizeof(serverAddress))==-1){errorPrint("connect() wrong!");}stringLength = read(socketNumber,getString,sizeof(getString)-1);if(stringLength==-1){errorPrint("read() is wrong!");}printf("string from server:%s\n",getString);close(socketNumber);return 0;
}void errorPrint(char *errorMessage){fputs(errorMessage,stderr);fputc('\n',stderr);exit(1);
}

gcc clientGetWelcome.c -o clientGetWelcome进行编译,./clientGetWelcome 127.0.0.1 9190连接到本机(127.0.0.1)的9190端口,然后就看到了string from server:Welcome to Our Server!这句话。
在这里插入图片描述

而服务端也退出了程序。
在这里插入图片描述

此文章为11月Day 9学习笔记,内容来源于极客时间《网络编程实战》。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/137524.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[LeetCode]-225. 用队列实现栈

目录 225. 用队列实现栈 题目 ​思路 代码 225. 用队列实现栈 225. 用队列实现栈 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/implement-stack-using-queues/description/ 题目 请你仅使用两个队列实现一个后入先出&#xff08;LIFO&#xff0…

使用Go语言搭建区块链基础

引言 随着区块链技术的发展&#xff0c;越来越多的人开始关注并使用这一技术&#xff0c;其中&#xff0c;比特币和以太坊等区块链项目正在成为人们关注的焦点。而Go语言作为一种高效、简洁的编程语言&#xff0c;越来越多的区块链项目也选择使用Go语言来搭建其底层基础。本文…

Kotlin学习笔记-Kotlin基础-01

变量声明 var&#xff1a;用于值不改变的变量&#xff0c;使用val声明的变量无法重新赋值 val&#xff1a;用于值可以改变的变量 变量声明格式 var/val data(变量名称) : Int(变量类型) Kotlin基本数据类&#xff1a; Int、Byte、Short、Long、Float、Double Kotlin类型推…

一文6个步骤带你实现接口测试入门!

一、接口测试概述 1 什么是接口测试&#xff1a; 接口测试是测试系统组件间交互的一种测试。接口测试主要用于检测外部系统与系统之间&#xff0c;内部各个子系统之间的交互点。测试的重点是要检查数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及系统间的相互逻辑…

WebGL-Vue3-TS-Threejs:基础练习 / Javascript 3D library / demo

一、理解Three.js Three.js是一个用于WebGL渲染的JavaScript库。它提供了一组工具和类&#xff0c;用于创建和渲染3D图形和动画。简单理解&#xff08;并不十分准确&#xff09;&#xff0c;Three.js之于WebGL&#xff0c;好比&#xff0c;jQuery.js之于JavaScript。 OpenGL …

在Google Kubernetes集群创建分布式Jenkins(二)

上一篇博客在Google Kubernetes集群创建分布式Jenkins(一)-CSDN博客我介绍了如何在GCP的K8S集群上部署一个分布式的Jenkins&#xff0c;并实现了一个简单的Pipeline的运行。 在实际的开发中&#xff0c;我们通常都会按照以下的CICD流程来设置Pipeline 在我司的实际实践中&…

ubuntu18-recvfrom接收不到广播报文异常分析

目录 前言 一、UDP广播接收程序 二、异常原因分析 总结 前言 在ubuntu18.04系统中&#xff0c;编写udp接收程序发现接收不到广播报文&#xff0c;使用抓包工具tcpdump可以抓取到广播报文&#xff0c;在此对该现象分析解析如下文所示。 一、UDP广播接收程序 UDP广播接收程序如…

Android从一个APP跳转到另外一个APP

1、从当前APP去全新启动另外一个目标APP&#xff08;非覆盖同一个进程&#xff09;&#xff1a; 启动另外一个目标APP&#xff08;非覆盖原来APP的方式&#xff09; 1、当前APP加入获取权限声明&#xff1a;&#xff08;不加人权限检查&#xff0c;没法启动目标app&#xff0…

接收表单数据

如果您尝试按下提交按钮&#xff0c;浏览器将显示“Method Not Allowed”错误。这是因为到目前为止&#xff0c;前一节中的登录视图函数完成了一半的工作。它可以在网页上显示表单&#xff0c;但是还没有逻辑来处理用户提交的数据。这是Flask-WTF使工作变得非常简单的另一个领域…

SQL进阶教程学习笔记

在学习《SQL进阶教程学习》的记录笔记&#xff0c;现学现用效率真的很高&#xff0c;带着问题学习&#xff0c;记忆会深很多很多。 CASE表达式 CASE表达式有简单CASE表达式&#xff08;simple caseexpression&#xff09;和搜索CASE表达式&#xff08;searched case expressi…

实战!工作中常用的设计模式

文章目录 前言一、策略模式1.1、 业务场景1.2 、策略模式定义1.3、 策略模式使用1.3.1、一个接口&#xff0c;两个方法1.3.2、不同策略的差异化实现1.3.3、使用策略模式 二、责任链模式2.1、业务场景2.2、责任链模式定义2.3、责任链模式使用2.3.1、一个接口或者抽象类2.3.2、每…

rust从0开始写项目-03-多样话错误处理

一个优秀的项目&#xff0c;错误处理的优雅性是至关重要的&#xff0c;而rust&#xff0c;anyhow creat是绕不过去的一个&#xff0c;今天我们来研究下&#xff0c;怎么使用它&#xff0c;帮助我们写出更优雅的代码 关注 vx golang技术实验室&#xff0c;获取更多golang、rust好…

解决Huggingface被墙下载模型的问题

参考&#xff1a; 如何快速下载huggingface模型——全方法总结 - padeoe的文章 - 知乎 https://zhuanlan.zhihu.com/p/663712983 和&#xff1a; https://hf-mirror.com/docs/huggingface_hub/guides/download#download-from-the-cli 最近几月huggingface彻底无法访问&…

【springboot配置项动态刷新】与【yaml文件转换为java对象】

文章目录 一&#xff0c;序言二&#xff0c;准备工作1. pom.xml引入组件2. 配置文件示例 三&#xff0c;自定义配置项动态刷新编码实现1. 定义自定义配置项对象2. 添加注解实现启动时自动注入3. 实现yml文件监听以及文件变化处理 四&#xff0c;yaml文件转换为java对象1. 无法使…

大容量疯了!居然想把磁带放到硬盘,100TB+是否可以实现?

1.引言 上一篇关于大容量硬盘的文章&#xff08;HDD最后的冲刺&#xff1a;大容量硬盘的奋力一搏&#xff09;中&#xff0c;我们针对大容量硬盘研发状态&#xff0c;小编最近又有了新发现。WDC希望可以通过HDD和磁带结合&#xff0c;把盘的容量提升到100TB。 2.数据大爆炸的…

问题描述:64位计算机的寻址能力是多少TB

问题描述&#xff1a;64位计算机的寻址能力是多少TB 我在看到一个32位电脑的寻址能力计算时&#xff0c;看到是这么计算的。 虚拟内存的大小受到计算机地址位数的限制&#xff0c; 那么32位电脑的寻址能力计算应该是这样 为什么网上百度到的是16TB呢&#xff0c;如下图所示 中…

大数据毕业设计选题推荐-农作物观测站综合监控平台-Hadoop-Spark-Hive

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

Web实验总

目录 网站需求&#xff1a; 思路&#xff1a; 实验步骤&#xff1a; 第一步&#xff1a;准备工作 第二步&#xff1a;新建一个存储网页的目录 第三步&#xff1a;修改本地hosts映射 第四步&#xff1a;修改配置文件&#xff0c;建立基于http服务的网站 1)创建用户song和…

宠物医院信息展示预约小程序的效果如何

养宠家庭越来越多&#xff0c;随之带来的就是宠物健康问题&#xff0c;生活条件稍微好点的家庭&#xff0c;只要宠物生病或洗护、寄养、美容等就会前往宠物医院&#xff0c;而近些年来&#xff0c;市场中的宠物医院也在连年增加&#xff0c;可以预见市场需求度较高。 而对宠物…

打开ps提示,计算机中丢失d3dcompiler_47.dll怎么解决?

“d3dcompiler_47.dll丢失5个解决办法”。相信很多同事在工作或者娱乐的过程中&#xff0c;都遇到过这个错误提示。那么&#xff0c;究竟什么是d3dcompiler_47.dll文件&#xff1f;为什么会丢失呢&#xff1f;又该如何解决这个问题呢&#xff1f;接下来&#xff0c;我将为大家详…