首页 > 黑马程序员_网络编程总结

黑马程序员_网络编程总结

------- android培训、java培训、期待与您交流! ----------

//以下笔记来自毕向东老师课程的总结

网络编程

网络编程的实现方式

网络编程有两种实现方式:即通过TCP协议和UDP协议。

问:TCPUDP有什么区别:

答:

1)        TCP协议:属于可靠的连接,在发送数据报之前建立连接,采用三次握手原则,可以保证数据能够完整的传输到目的地,因而传输速度也会比较慢。

2)        UDP协议:属于不可靠的连接,发送数据包之前不会建立连接,不会保证数据报到没到达目的地。

(1)UDP:

  a、将数据及源和目的封装成数据包,不需要建立连接

  b、每个数据包的大小限制在64K内

  c、因无连接,是不可靠协议

  d、不需要建立连接,速度快

 (2)TCP:

  a、建立连接,形成传输数据的通道

  b、在连接中进行大数据量传输

  c、通过三次握手完成连接,是可靠协议

  d、必须建立连接,效率会稍低

TCP程序

JavaTCP程序的实现:

|-  使用ServerSocket类来代表服务器端,public class ServerSocket extends Object

|-  使用Socket类来代表客户端,public class Socket extends Object

 

2、UDP传输

 (1)DatagramSocket,建立发送端send(DatagramPacket p)、接收端receive(DatagramPacket p)

 (2)DatagramPacket,数据报包用来实现无连接包投递服务,构造函数有DatagramPacket(byte[] buf,int length,InetAddress address,int port)等

 (3)通信实现(发送端):

  a、建立udpsocket服务,例如DatagramSocket ds = new DatagramSocket()对象

  b、提供数据,并将数据封装到数据包中,即将数据转换成字节数组,再使用DatagramPacket进行封装,例如byte[] buf = "udp is sending".getByte();DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByname("192.168.0.100"),10000)

  c、通过socket服务的发送功能,将数据包发出去,ds.send(dp);

  d、关闭资源,例如ds.close();

 (4)通信实现(接收端):

  a、建立udpSocket服务,例如 DatagramSocket ds = new DatagramSocket(10000);

  b、建立一个数据包,因为接收到的是一个字节数据,数据包对象中有更多的功能用于提取字节数据的信息,例如 byte[] buf = new byte[1024];DatagramPacket dp = new DatagramPacket(buf,buf.length);

  c、通过socket服务的接收方法将收到的数据获取到DatagramPacket中,ds.receive(dp);

  d、通过DatagramPacket的功能将数据流解读出来,并输出到需要的地方,例如,String ip = dp.getAddress().getHostAddress();String data = new String(dp.getData(),0,dp.getLength());

  e、关闭资源,ds.close();

3、TCP传输

 (1)Socket建立客户端,SeverSocket建立服务器端

 (2)建立连接后,通过Socket中的IO流进行数据传输

 (3)关闭Socket

 (4)通信实现(客户端):

  a、建立socket服务,tcp是面向连接的,在建立socket服务时就要指定要连接的主机和端口以建立连接,例如Socket soc = new Socket("192.168.0.100",10003);

  b、建立用于获取或写入socket输入输出流的IO流对象,例如OutputStream out = s.getOutputStream;InputStream in = new InputStream();

  c、向输出流写入数据,数据即可从socket输出流输出,out.write("tcpmsg is sending".getByte());使用输入流读取即可获取socket输入流的数据,InputStream in = s.getInputStream();byte[] buf = new byte[1024];int len = in.read(buf);String str = new String(buf,0,len);

  d、关闭资源,soc.close();

 (5)通信实现(服务端):

  a、建立SeverSocket服务,并监听一个端口,SeverSocket ss = newSeverSocket(10003);

  b、通过accept方法获取连接过来的客户端对象,Socket s = ss.accept();

  c、客户端如果发来数据,服务端使用上一步获取的对应客户端对象读取数据,InputStream in = s.getInputStream();byte[] buf = new byte[1024];int len = in.read(buf);String str = new String(buf,0,len);

  d、关闭客户端,释放资源,s.close()

  e、关闭服务端,(如果还要等待下一个客户端连接的话,也可以不关闭服务端),ss.close();

TCP传输



Socket和ServerSocket



建立客户端和服务器端



建立连接后,通过Socket中的IO流进行数据的传输



关闭socket



同样,客户端与服务器端是两个独立的应用程序。

 

 基本思路(客户端)



客户端需要明确服务器的ip地址以及端口,这样才可以去试着建立连接,如果连接失败,会出现异 常。



连接成功,说明客户端与服务端建立了通道,那么 通过IO流就可以进行数据的传输,而Socket对象已经提供了输入流和输出流对象,通过 getInputStream(),getOutputStream()获取即可。



与服务端通讯结束后,关闭Socket。



通过Socket建立对象并指定要连接的服务端主机以及端口。

Socket s = new Socket(“192.168.1.1”,9999);

OutputStream out = s.getOutputStream();

out.write(“hello”.getBytes());

s.close();

 

 基本思路(服务端)



服务端需要明确它要处理的数据是从哪个 端口进入的。



当有客户端访问时,要明确是哪个客户 端,可通过accept()获取已连接的客户端对象,并通过该对象与客户端通过IO流进行数据传输。



当该客户端访问结束,关闭该客户端。



建立服务端需要监听一个端口

ServerSocket ss = new ServerSocket(9999);

Socket s = ss.accept ();

InputStream in = s.getInputStream();

byte[] buf = new byte[1024];

int num = in.read(buf);

String str = new String(buf,0,num);

System.out.println(s.getInetAddress().toString()+”:”+str);

s.close();

ss.close();

转载于:https://www.cnblogs.com/chen-bao-feng/archive/2013/03/22/2975128.html

更多相关:

  • 本文是西门子开放式TCP通信的第2篇,上一篇我们讲了使用西门子1200PLC作为TCP服务器的程序编写,可以点击下方链接阅读:【公众号dotNet工控上位机:thinger_swj】基于Socket访问西门子PLC系列教程(一)在完成上述步骤后,接下来就是编写上位机软件与PLC之间进行通信。上位机UI界面设计如下图所示:从上图可以看出...

  • 我有一个大型数据集,列出了在全国不同地区销售的竞争对手产品。我希望通过使用这些新数据帧名称中的列值的迭代过程,根据区域将该数据帧分成几个其他区域,以便我可以分别处理每个数据帧-例如根据价格对每个地区的信息进行排序,以了解每个地区的市场情况。我给出了以下数据的简化版本:Competitor Region ProductA Product...

  • 作为一名IT从业者,我来回答一下这个问题。首先,对于具有Java编程基础的人来说,学习Python的初期并不会遇到太大的障碍,但是要结合自己的发展规划来制定学习规划,尤其要重视学习方向的选择。Java与Python都是比较典型的全场景编程语言,相比于Java语言来说,当前Python语言在大数据、人工智能领域的应用更为广泛一些,而且大...

  • 这段时间通过学习相关的知识,最大的变化就是看待事物更加喜欢去了解事物后面的本质,碰到问题后解决问题思路也发生了改变。举个具体的例子,我在学习数据分析,将来会考虑从事这方面的工作,需要掌握的相关专业知识这个问题暂且按下不表,那哪些具体的问题是我需要了解的呢,以下简单罗列:1、了解数据分析师这个岗位在各个地区的需求情况?2、数据分析师的薪...

  • 这一节将开始学习python的一个核心数据分析支持库---pandas,它是python数据分析实践与实战的必备高级工具。对于使用 Python 进行数据分析来说,pandas 几乎是无人不知,无人不晓的。今天,我们就来认识认识数据分析界鼎鼎大名的 pandas。目录一. pandas主要数据结构 SeriesDataFrame二...

  • 文章目录搭建实验平台使用Unity的准备工作在PC端安装连接Hololens软件Hololens设置开始连接吧绘制显示PC端网页监控...

  •  将多次卷积和池化后的图像展开进行全连接,如下图所示。  全连接层需要把输入拉成一个列项向量          比如你的输入的feature map是2X2,那么就需要把这个feature map 拉成4X1的列向量,如果你的feature map 的channels是3,也就是你的输入是3X2X2,也就是相当于有了12个像素点,...

  •   注意,前情提示: 本代码基于《Node.js(nodejs)对本地JSON文件进行增、删、改、查操作(轻车熟路)》 传送门Node.js(nodejs)对本地JSON文件进行增、删、改、查操作(轻车熟路)_你挚爱的强哥❤给你发来1条消息❤-CSDN博客 首先安装 cnpm i nodejs-websocket 在/a...

  • Ubuntu 配置自带桌面共享 1、在setting>>shareing>>remote 选择on 如果用ubunutu直接远程连接的话已经可以了, 2、在ubuntu下使用系统自带的remmina连接 vnc类型 直接输入ip地址 3、如果在windows下面连接的话需要把加密选项关闭 内容: 安装dconf-edito...

  • 第四节 RabbitMQ在C#端的应用-客户端连接 原文:第四节 RabbitMQ在C#端的应用-客户端连接 版权声明:未经本人同意,不得转载该文章,谢谢 https://blog.csdn.net/phocus1/article/details/87357911 1.在VS2013中新建控制台程序,然后添加引用:.NE...