当前位置: 首页 > news >正文

洛阳网站建设设计公司哪家好网站内容管理系统

洛阳网站建设设计公司哪家好,网站内容管理系统,wordpress 删除示例页面,学做网站要什么学历Socket编程对TCP/IP、UDP、Socket编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵。那么我想问:1. 什么是TCP/IP、UDP?2. Socket在哪里呢?3. Socket是什么呢?4. 你会使用它们吗&#…

Socket编程

TCP/IPUDPSocket编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵。那么我想问:1. 什么是TCP/IP、UDP?2. Socket在哪里呢?3. Socket是什么呢?4. 你会使用它们吗?什么是TCP/IP、UDP? TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,是一个工业标准的协议集,它是为广域网(WANs)设计的。UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是属于TCP/IP协议族中的一种。 这里有一张图,表明了这些协议的关系。

32c246b60647747ed79147a03fa4e83b.png
图1

TCP/IP协议族包括运输层、网络层、链路层。现在你知道TCP/IPUDP的关系了吧。Socket在哪里呢?
在图1中,我们没有看到Socket的影子,那么它到底在哪里呢?还是用图来说话,一目了然。

f3489a008dd4b01ba08ed7b9c9679f06.png
图2

原来Socket在这里。Socket是什么呢?Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。你会使用它们吗?前人已经给我们做了好多的事了,网络间的通信也就简单了许多,但毕竟还是有挺多工作要做的。以前听到Socket编程,觉得它是比较高深的编程知识,但是只要弄清Socket编程的工作原理,神秘的面纱也就揭开了。 一个生活中的场景。你要打电话给一个朋友,先拨号,朋友听到电话铃声后提起电话,这时你和你的朋友就建立起了连接,就可以讲话了。等交流结束,挂断电话结束此次交谈。 生活中的场景就解释了这工作原理,也许TCP/IP协议族就是诞生于生活中,这也不一定。

ef9a68de4f75c9600a26b74eb109aee2.png
图3
此处的收发用的write和read好像有问题啊。应该是recv和send啊。

先从服务器端说起。服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束。 在这里我就举个简单的例子,我们走的是TCP协议这条路(见图2)。例子用MFC编写,运行的界面如下:

4f1fb10b59af71c2b726610ff89918ba.png
图4

38f7f1fce956dba9674af057b6e87338.png
图5

在客户端输入服务器端的IP地址和发送的数据,然后按发送按钮,服务器端接收到数据,然后回应客户端。客户端读取回应的数据,显示在界面上。

以下是java封装过的类接口。

下面是接收数据和发送数据的函数:ServerSocket类
创建一个ServerSocket类,同时在运行该语句的计算机的指定端口处建立一个监听服务,如:
ServerSocket MyListener=new ServerSocket(600);
这里指定提供监听服务的端口是600,一台计算机可以同时提供多个服务,这些不同的服务之间通过端口号来区别,不同的端口号上提供不同的服务。为了随时监听可能的Client请求,执行如下的语句:
Socket LinkSocket=MyListener.accept();
该语句调用了ServerSocket对象的accept()方法,这个方法的执行将使Server端的程序处于等待状态,程序将一直阻塞直到捕捉到一个来自Client端的请求,并返回一个用于与该Client通信的Socket对象Link-Socket。此后Server程序只要向这个Socket对象读写数据,就可以实现向远端的Client读写数据。结束监听时,关闭ServerSocket对象:
Mylistener.close();
是用作服务器端程序设计的
在服务器端,利用ServerSocket类的构造函数ServerSocket(int port)创建一个ServerSocket类的对象,port参数传递端口,这个端口就是服务器监听连接请求的端口,如果在这时出现错误将抛出IOException异常对象,否则将创建ServerSocket对象并开始准备接收连接请求。
服务程序从调用ServerSocket的accept()方法开始,直到连接建立。在建立连接后,accept()返回一个最近创建的Socket对象,该Socket对象绑定了客户程序的IP地址或端口号。Socket类
当Client程序需要从Server端获取信息及其他服务时,应创建一个Socket对象:
Socket MySocket=new Socket(“ServerComputerName”,600);
Socket类的构造函数有两个参数,第一个参数是欲连接到的Server计算机的主机地址,第二个参数是该Server机上提供服务的端口号。
Socket对象建立成功之后,就可以在Client和Server之间建立一个连接,并通过这个连接在两个端点之间传递数据。利用Socket类的方法getOutputStream()和getInputStream()分别获得向Socket读写数据的输入/输出流,最后将从Server端读取的数据重新返还到Server端。
当Server和Client端的通信结束时,可以调用Socket类的close()方法关闭Socket,拆除连接。
ServerSocket 一般仅用于设置端口号和监听,真正进行通信的是服务器端的Socket与客户端的Socket,在ServerSocket 进行accept之后,就将主动权转让了。
客户端程序设计
当客户程序需要与服务器程序通信时,需在客户机创建一个Socket对象。Socket类有构造函数Socket(InetAddress addr,int port)和Socket(String host,intport),两个构造函数都创建了一个基于Socket的连接服务器端流套接字的流套接字。对于第一个InetAd-dress子类对象通过addr参数获得服务器主机的IP地址,对于第二个函数host参数包被分配到InetAddress对象中,如果没有IP地址与host参数相一致,那么将抛出UnknownHostException异常对象。两个函数都通过参数port获得服务器的端口号。假设已经建立连接了,网络API将在客户端基于Socket的流套接字中捆绑客户程序的IP地址和任意一个端口号,否则两个函数都会抛出一个IOException对象。
如果创建了一个Socket对象,那么它可通过get-InputStream()方法从服务程序获得输入流读传送来的信息,也可通过调用getOutputStream()方法获得输出流来发送消息。在读写活动完成之后,客户程序调用close()方法关闭流和流套接字。交互过程
Socket与ServerSocket的交互,下面的图片我觉得已经说的很详细很清楚了。

c4bc265b5350498799eca4f41075a098.png

Socket构造函数
Socket()
Socket(InetAddress address, int port)throws UnknownHostException, IOException
Socket(InetAddress address, int port, InetAddress localAddress, int localPort)throws IOException
Socket(String host, int port)throws UnknownHostException, IOException
Socket(String host, int port, InetAddress localAddress, int localPort)throws IOException
除去第一种不带参数的之外,其它构造函数会尝试建立与服务器的连接。如果失败会抛出IOException错误。如果成功,则返回Socket对象。
InetAddress是一个用于记录主机的类,其静态getHostByName(String msg)可以返回一个实例,其静态方法getLocalHost()也可以获得当前主机的IP地址,并返回一个实例。Socket(String host, int port, InetAddress localAddress, int localPort)构造函数的参数分别为目标IP、目标端口、绑定本地IP、绑定本地端口。Socket方法
getInetAddress();   远程服务端的IP地址
getPort();       远程服务端的端口
getLocalAddress()   本地客户端的IP地址
getLocalPort()     本地客户端的端口getInputStream();  获得输入流getOutStream();   获得输出流
值得注意的是,在这些方法里面,最重要的就是getInputStream()和getOutputStream()了。Socket状态
isClosed();     //连接是否已关闭,若关闭,返回true;否则返回false
isConnect();      //如果曾经连接过,返回true;否则返回false
isBound();     //如果Socket已经与本地一个端口绑定,返回true;否则返回false
如果要确认Socket的状态是否处于连接中,下面语句是很好的判断方式。
boolean isConnection=socket.isConnected() && !socket.isClosed(); //判断当前是否处于连接半关闭Socket
很多时候,我们并不知道在获得的输入流里面到底读多长才结束。下面是一些比较普遍的方法:

  • 自定义标识符(譬如下面的例子,当受到“bye”字符串的时候,关闭Socket)
  • 告知读取长度(有些自定义协议的,固定前几个字节表示读取的长度的)
  • 读完所有数据
  • 当Socket调用close的时候关闭的时候,关闭其输入输出流

ServerSocket构造函数
ServerSocket()throws IOException
ServerSocket(int port)throws IOException
ServerSocket(int port, int backlog)throws IOException
ServerSocket(int port, int backlog, InetAddress bindAddr)throws IOException
注意点:
1. port服务端要监听的端口;backlog客户端连接请求的队列长度;bindAddr服务端绑定IP
2. 如果端口被占用或者没有权限使用某些端口会抛出BindException错误。譬如1~1023的端口需要管理员才拥有权限绑定。
3. 如果设置端口为0,则系统会自动为其分配一个端口;
4. bindAddr用于绑定服务器IP,为什么会有这样的设置呢,譬如有些机器有多个网卡。
5. ServerSocket一旦绑定了监听端口,就无法更改。ServerSocket()可以实现在绑定端口前设置其他的参数。

http://www.lbrq.cn/news/2658367.html

相关文章:

  • 虚拟机怎么做网站空间怎么样做免费的百度seo
  • 网站托管服务使用于那种类型的网站网络营销总监岗位职责
  • 怎样自学做网站全网营销有哪些平台
  • 没有官方网站怎么做seo优化南京网络推广公司排名
  • 潍坊 区网站建设正在直播足球比赛
  • 怎么做中英文的网站欧洲网站服务器
  • 合肥关键词排名优化百度seo关键词排名优化软件
  • 响水网站建设找哪家好项链seo关键词
  • 做网站一定要虚拟主机吗宁波网络营销公司
  • 做公司网站有什么猫腻广告推广网站
  • 孝南区建设局网站营销推广策略
  • 网上那么多色图网站怎么做的seo的概念
  • 电子商务网站建设学什么网站手机版排名seo
  • 在线做网站 自动生成手机版百度seo技术
  • 什么网店可以免费开店长沙网站推广排名优化
  • 网站如何添加统计代码是什么手机网站快速建站
  • wordpress群聊插件佛山百度提升优化
  • 网页打不开建设银行网站最火网站排名
  • wordpress汽车模板seo外包公司多少钱
  • 网上服务大厅12333北京seo百度推广
  • 找哪个网站做摩配百度人工服务热线24小时
  • 建筑设计资料网站免费推广公司
  • 东莞常平做网站腾讯与中国联通
  • 江油网站制作百度云搜索引擎入口官方
  • 陕西渭南住房和城乡建设厅网站网站浏览器
  • 网站建设分金手指专业十六seo会被取代吗
  • 南阳做网站多少费用专业郑州企业网站建设
  • 泊头网站制作深圳网络公司推广
  • 上海公安局 网站备案贵阳网站优化公司
  • 温州哪里有做网站学电商哪个培训学校好
  • LeetCode_字符串
  • 基于遗传优化的智能灌溉系统控制策略matlab仿真
  • 从零玩转Linux云主机:免费申请、连接终端、命令速查表
  • IntelliJ IDEA 新手全方位使用指南
  • 《在 Spring Boot 中安全使用 Qwen API-KEY:环境变量替代明文配置的最佳实践》
  • P1690 贪婪的 Copy