关于客户端创建流程_客户端怎么做-程序员宅基地

技术标签: 网络编程  

在前面的几篇博客中已经记录了IP、端口、DNS等,这些东西的用途很大一部分是用来构建客户端与服务器的,那么客户端与服务器到底要怎么构建呢?
首先说说怎样构建客户端:
在构建客户端之前,我们需要知道,客户端是用来干什么的,简单点说客户端给用户使用的,一般安装在用户的机器上,它与服务器相对应模具个例子,你在菜市场上买菜,看中了一个摊上的水果,决定买,你和商家谈好价钱,你把钱给商家,商家就会收到一个消息,而商家反馈给你的就是你买的那些苹果,这个时候你就是客户端,商家就是服务器,客户端给服务器发送消息,服务器反馈给你消息。
从上面的例子我们能思考到什么呢?如果你要买苹果,你需要先有一个买苹果的意向,还需要一个买苹果的地点、买苹果的资格,这也就是构建客户端的几大要素,途径、目标、交流方式等

现在来构建一个简单的客户端吧

首先,你需要有一个要连接的目标,在客户端与服务器的构建中,由于彼此都需要一个要连接的对象,所以就产生了socket

Socket socket;//定义一个套接字用于与服务器的连接,这也就相当于买菜的时候的你不管你要干什么都需要通过你来完成
public void Connected()
    {
        try
        {
            socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
           
            socket.Connect("127.0.0.1", 8888);

        }
        catch(SocketException ex)
        {
            socket = null;
            Debug.Log("连接失败,请重试");
        }
    }

socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//在构建之前,如果不实例化,那么一切都是虚幻的不能进行,所以这句话就相当于吧你给充实起来,里面的参数分别代表着,1.你要在什么环境下交易2.你要以什么方式交易3.你们之间交易的形式是什么,这些条件都是在连接之前需要指定的,比较书面的解释是1.寻址类型2.套接字类型3.协议类型
下一句代码是开始连接服务器,如果想要连接的话,你需要知道服务器在哪里,端口是什么
所以参数给出的就是服务器的地址与端口

发送消息功能:

public void Send()
    {
        string senStr = InputField.text;
        byte[] senfBytes = System.Text.Encoding.UTF8.GetBytes(senStr);//获取输入信息的字节
        socket.Send(senfBytes);//将消息发送给服务器


        byte[] readBuffer = new byte[1024];//用来储存从服务器接收到的消息
        int count = socket.Receive(readBuffer);
        string recvStr = System.Text.Encoding.UTF8.GetString(readBuffer, 0, count);
        text1.text = recvStr;
        socket.Close();
        socket = null;
    }

首先你要确定的是,你要发送的消息有多大,这就用到了System.Text.Encoding.UTF8.GetBytes(senStr);//获取输入信息的字节,发送的消息确定之后,还需要接收服务器(商家)反馈的消息,需要先开辟一块空间用来储存反馈的消息,由于在客户端和服务器之间的消息传递不能直接以字符串的形式传递,而只能以字节数组的形式,所以需要用这个System.Text.Encoding.UTF8.GetString(readBuffer, 0, count);将字节数组转换成我们想要获取的信息,参数分别是接收消息的字节数组,开始读取的索引,读取的长度,由于是简单的客户端的构建,所以我们之发送一次消息,接收一次消息就关闭了,也就是最后一句话
socket.Close();起到的作用就是关闭客户端。

以上只是个人的理解,有不对的地方请多见谅。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lfanyize/article/details/103111996

智能推荐

【C++】最通俗的多态、虚表、虚指针讲解_虚表指针-程序员宅基地

文章浏览阅读2.9k次,点赞26次,收藏82次。多态需要两个特性:(1)方法重写(override):父类与子类具有函数签名完全相同的方法。(2)向上类型转换(upcasting):用一个父类指针指向子类对象的时候,假如调用的是虚函数,会自动暂时将该指针转换为子类类型的指针。虚函数的存在就是为了类型转换,即使没有虚函数也能重写方法。虚函数并不是为了解决函数重写问题的。假如你去在父类和子类中都写上函数签名相同的方法,同样也能重写函数。例如 我们先写一个没有虚函数的例子结果为是完全没问题的!是的,即使不加virtual,也能实现方法重写!假如我用子类_虚表指针

【FFmpeg】ffmpeg命令详解(一)_ffmpeg -vf命令-程序员宅基地

文章浏览阅读5k次。1、命令格式ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ...global_options:全局选项input_file_options:输入文件相关的选项output_file_options:输出文件相关的选项-i input_url:输入文件,可以有多个输入文件,每个输入文件前都要加“-i”选项output_url:输出文件2、简述_ffmpeg -vf命令

emWin 学习使用笔记 (3)_emwin demo-程序员宅基地

文章浏览阅读130次。原来想既然STemWin对此要求不高,随便找个版本就行,从VC6.0到VC2015,结果遇到莫名奇妙的许多问题(可能不是正版造成的吧),后来去微软官网下载了VC2022的专业版又有1个月的使用限制,唉!简单使用的方法,使我们对STemWin快捷的感受了一下它的尊容。实际它的内容还很丰富!要想达到能做点事的水平,需要踏踏实实的学习一番。StemWin提供了丰富的DEMO例程,重点就是学这个啦!该公司做了大量的编写及归纳整理工作,实际这里的基本就够啦。(1) 笔记本或一台电脑,我用的Win10。_emwin demo

【jQuery 冻结任意行列】冻结任意行和列的jQuery插件-程序员宅基地

文章浏览阅读417次。 实现原理:创建多个div,div之间通过css实现层叠,每个div放置当前表格的克隆。例如:需要行冻结时,创建存放冻结行表格的div,通过设置z-index属性和position属性,让冻结行表格在数据表格的上层。同理,需要列冻结时,创建存放冻结列表格的div,并放置在数据表格的上层。如果需要行列都冻结时,则除了创建冻结行、冻结列表格的div,还需要创建左上角的固定行列表格的d..._列冻结列解冻jquery

第二周项目4求一个正整数的各位数字之和_输入一个整数求各位数字之和时间复杂度-程序员宅基地

文章浏览阅读1.2k次。问题及描述:/* *Copyright(c++)2015,烟台大学计算机学院 *All rights reserved, *文件名称:test.cpp *作 者:程梦莹 *完成日期:2015年9月12日 *版本号:v1.0 *问题描述:计算任一输入的正整数的各位数字之和,并分析算法的时间复杂度 *输入描述:一个整数 */#include_输入一个整数求各位数字之和时间复杂度

微型计算机原理与接口实验报告,微型计算机原理及接口技术实验报告.docx-程序员宅基地

文章浏览阅读3.6k次。成都理工大学微型计算机原理及接口技术实验报告学 院 : 核技术与自动化工程学院专 业 : 电气工程及其自动化班 级 :学 号 :姓 名 :指导老师 :完成时间 :实验一 EMU 8086软件的使用1、实验目的通过对emu8086的使用,来理解《微型计算机原理及接口技术》课本上的理论知识,加深对知识的运用,以及emu8086交互式学习汇编语言(Assembly ..._微机原理与接口技术emu8086课题总结

随便推点

西电软件体系结构——01绪论-程序员宅基地

文章浏览阅读288次。课程简介软件体系结构的主题是针对复杂软件系统的高层结构、组织单元之间的相互关系的描述,以及围绕这种描述开展的各项活动,如设计、评估、实现、管理等。课程目标_西电软件体系结构

Job for mysqld.service failed because the control process exited with error code-程序员宅基地

文章浏览阅读1k次。initialize specified but the data directory has files in it.”意思是初始化数据目录时发现目录里面有文件,可能原因是之前运行过命令目录中已生成文件。只要我们找到MySQL的数据目录并删除里面的文件即可解决。datadir是我们安装MySQL时默认指定的存放文件的数据目录,进入文件中删除里面的目录即可。网上搜了一下绿线标注部分语句,说是缺少libaio这个包,那就装一下。PS:如果我的方法没用的话可以试试网上说的修改文件权限的方法。_job for mysqld.service failed because the control process exited with error

老司机必备的手机浏览器,比UC浏览器还好用_比uc好用的手机浏览器-程序员宅基地

文章浏览阅读1w次。各位听得最多的段子:老司机们,上车了。没错,不管是在电脑端还是移动端,都需要一款好用的浏览器。那么,老司机们都用什么浏览器,什么样的浏览器才是老司机必备的浏览器呢?来咯,这些手机浏览器比UC浏览器还好用,功能可媲美桌面浏览器,一起来看看吧。_比uc好用的手机浏览器

7-35 jmu-Java&Python-统计文字中的单词数量并按出现次数排序-程序员宅基地

文章浏览阅读1.3k次。7-35 jmu-Java&Python-统计文字中的单词数量并按出现次数排序_jmu-java&python-统计文字中的单词数量并按出现次数排序

C语言——三位数的百位,十位,个位分别输出_输入一个三位数,输出它的百位,十位,个位-程序员宅基地

文章浏览阅读3.5w次,点赞16次,收藏39次。b=number/10%10=520/10%10=52%10,“%”是取余符号,即52%10=5*10余2,%符号取得就是这个2。a=number/100=520/100,如果是正常计算的话应该等于5.2,但是“a”是int型属于整形,也就是说取它的整数部分。c=number%10;printf("百位数是%d\n",a);printf("十位数是%d\n",b);printf("个位数是%d\n",c);printf("请输入一个三位数\n");..._输入一个三位数,输出它的百位,十位,个位

Android Reveal圆形Activity转场动画_reveal动画-程序员宅基地

文章浏览阅读2k次。一、效果二、知识点CircularReveal动画、透明主题、转场动画(非必须)三、方案假设有两个Activity A和B。Reveal圆形Activity转场动画效果先从A到B,那么基本方案如下:确定要显示的圆形动画中心起点位置通过Intent将起点位置从Activity A传递BActivity B主题需要是透明的,同时先隐藏布局视图在Activity A中启动Activi..._reveal动画