网络编程

网络模型

*OSI参考模型

*Tcp/IP参考模型

网络通读要素

*IP地址

*端口号

*传输协议



1.找到对方Ip

2.数据要发送到对方指定的的应用程序上,为了标识这些应用程序,所经给这些网络应用程序都用数字进行标识。

为了方便称呼这个数字,叫做端口,逻辑端口。0-65535任选。0-1024端口被系统所用。mysql:3306

web:80 tomcat:8080 ftp:21 远程:3389 端口只能有一个,不能相互冲突

3.定义通信规则,这个通讯规则。

检测网卡是否出问题,可以通过ping 127.0.0.1进行,看是否能Ping通。



网线就是标准的物理层设备

OSI参考模型

应用层,表示层,会话层,传输层,网络层,数据链路层,物理层。





数据封包,然后就是数据拆包

Tcp/IP参考模型(从上往下)

应用层,传输层(tcp/ip),网际层(ip),主机至网络层



javaweb网络开发,我们是在应用层做



IP地址:网络中设备的标识

不易记忆,可用主机名。

本地回环地址:127.0.0.1 主机名:localhost

端口号:

用于标识进程的逻辑地址,不同进程的标识。

有效端口:0-65535,其中0-1024,系统使用或保留端口。

传输协议:通讯的规则。

常见的协议:TCP,UDP



TCP和UDP的特点:

TCP:建立连接,形成传输数据的通道 

在连接中进行大数据传输。

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

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

如果连接中断,它会记住上次连接到那里

UDP:

将数据用源目的封装成数据包中,不需要建立连接。

在发据前,不需要建立连接。就是给邮局寄东西。

如果没找到,包就会丢掉。发的包是有限制的。

每个数据报的大小限制在64K内。

因载连接,是不可靠协议。

不需要建立连接。速度快。

如果对方真在的话,就马上收到了。

相当于固话机,在某一频段上。开着就能收到。

服务端:

  1. import java.net.DatagramPacket;
  2. import java.net.DatagramSocket;
  3.  
  4. /**
  5. * 需求:定义一个应用程序,用于接收udp协议
  6. * 传输的数据服务并处理。
  7. * 思路:1.定义一udpsocket服务,通常会指定一个监听端口,
  8. * 其实就是给这个接收网络应用程序定久数字标识,方便
  9. * 于明确哪些应用程序发消息过来。
  10. * 2.定义一个数据包,因为要存储接收到的字节
  11. * 数据,因为数据包对象中有更多功能可以提取
  12. * 字节数据中的不同的数据信息。
  13. * 3.通过socket服务的receive方法将收到的数据
  14. * 存入已定义好的数据包中。
  15. * 4.通过数据包对象的特有功能,将这些不同的数
  16. * 据取出,打印在控制台上。
  17. * 5.关闭资源。
  18. * @author hjl
  19. *
  20. */
  21.  
  22. public class UDPReceive {
  23. //接收端的内容都来自10000端口。
  24. public static void main(String [] args)throws Exception{
  25. //1.创建udp socket,建立端点。
  26. DatagramSocket ds=new DatagramSocket(10000);
  27.  
  28. while(true){
  29. //2.定义数据包,用于存储,分析这个缓冲区,
  30. byte[] buf=new byte[1024];
  31. DatagramPacket dp=new DatagramPacket(buf, buf.length);
  32. //3.通过服务的receive方法将收到数据存入数据包中。
  33. ds.receive(dp);//这是一个阻塞式方法
  34.  
  35. //4.通过数据包中的方法获取其中的对象。
  36. String ip =dp.getAddress().getHostAddress();
  37. String data=new String(dp.getData(),0,dp.getLength());
  38.  
  39. int port=dp.getPort();
  40. System.out.println(ip+"::"+data+"::"+port);
  41. //这个port是系统随机给发送端应用程序的一个标识
  42. //数据是从port出来的。发送至接收端的10000端口
  43. }
  44. //关闭资源
  45. //ds.close();
  46. }
  47. }

客户端:

  1. import java.net.DatagramPacket;
  2. import java.net.DatagramSocket;
  3. import java.net.InetAddress;
  4.  
  5. /**
  6. * 需求:通过udp传输方式,将一段文字数据发送出去
  7. * 思路:1.建立udpSocket服务。
  8. * 2.提供数据,并将数据封装到数据包中。
  9. * 3.通过Socket服务的发送功能,将数据包发出去。
  10. * 4.关闭数据。
  11. * @author hjl
  12. *
  13. */
  14. public class UDPSend {
  15.  
  16. public static void main(String [] args)throws Exception {
  17. //1.创建udp服务,通过DatagramSocket对象。
  18. DatagramSocket ds=new DatagramSocket(8888);//我们也可以在这里指定端口
  19. //2.确定数据,并封装成数据包,DatagramSocket(byte[] buf,int length,InetAddress address,int port)
  20. byte[] buf="zhe shi udp shuju".getBytes();
  21. DatagramPacket dp=new DatagramPacket(buf, buf.length,InetAddress.getByName("172.16.196.12"),10000);
  22. //3.通过Socket服务,将已有的数据包发送出去。通过send方法
  23. ds.send(dp);
  24. ds.close();
  25.  
  26. }
  27.  
  28. }

网络编程之键盘录入UDP

服务端:

  1. import java.net.DatagramPacket;
  2. import java.net.DatagramSocket;
  3.  
  4. public class UDPReceive2 {
  5.  
  6. public static void main(String [] args) throws Exception{
  7. DatagramSocket ds=new DatagramSocket(10001);
  8.  
  9. while(true){
  10. byte[] buf=new byte[1024];
  11.  
  12. DatagramPacket dp=new DatagramPacket(buf, buf.length);
  13. ds.receive(dp);//阻塞式方法
  14.  
  15. String ip=dp.getAddress().getHostAddress();
  16. String data=new String (dp.getData(),0,dp.getLength());
  17.  
  18. System.out.println(ip+"::"+data);
  19. }
  20.  
  21. }
  22.  
  23. }



客户端:

  1. import java.io.BufferedReader;
  2. import java.io.InputStreamReader;
  3. import java.net.DatagramPacket;
  4. import java.net.DatagramSocket;
  5. import java.net.InetAddress;
  6.  
  7. public class UDPSend2 {
  8.  
  9. public static void main(String [] args)throws Exception{
  10. DatagramSocket ds=new DatagramSocket();
  11. BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
  12. String line=null;
  13. while((line=bufr.readLine())!=null){//readline也是阻塞式方法
  14. if("886".equals(line))
  15. break;
  16. byte[] buf=line.getBytes();
  17. DatagramPacket dp=new DatagramPacket(buf, buf.length,InetAddress.getByName("172.16.196.12"),10001);
  18. ds.close();
  19.  
  20. }
  21. }
  22.  
  23. }

Socket编程:

Socket就是网络服务提供的一种机制。

通信的两端都有Socket。

网络通信其实就是Socket间的通信。

数据在两个Socket间通过IO传输。



每个应用程序都类似有一个sockect,然后进行互联。

 先有港口,然后才有船只进行装货,卸货。

为网络服务提供一种机制。



UDP传输

DatagramSocket与DatagramPacket

建立发送端,接收端,

建立数据包。

调用Socket的发送接收方法。

关闭Socket。

发送端与接收端是两个独立的运行程序。



DatagramPacket:

数据报包用来实现无连接包投递服务。每条报文仅根据该包中包含的信息从一台机器路由到另一台机器。从一台机器发送到另一台机器的多个包可能选择不同的路由,也可能按不同的顺序到达。不对包投递做出保证。



端口绑定异常,一般都是服务端口被应用多次。常出现在一些循环中。



TCP传输:

Socket和ServerSocket

建立客户端和服务端

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

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



客户端发送数据给服务端,这里指的是发送文本,然后服务端把文本存起来。

这个例子的重点是标识怎么定义的问题。如果要利用上传图片的话,就不能用字符流,而要用字节流。



客户端:

  1. import java.io.*;
  2. import java.net.*;
  3. class TextClient {
  4. public static void main(String [] args) throws IOException{
  5. Socket s= new Socket("192.168.1.254",10006);
  6. BufferedReader bufr=new
  7. BufferedReader(new FileReader("client.java");//这个文件一定要判断,是否存在。
  8. PrintWriter out=new PrintWriter(s.getOutPutStream(),true);
  9.  
  10. //判断标识
  11. DataOutputStream dos=new DataOutputStream(s.getoutputStream());
  12. longtime=System.currentTimeMills();
  13. dos.writeLong(time);
  14.  
  15. String line=null;
  16. While((line=bufr.readLine())!=null){
  17. out.println(line);
  18.  
  19. }
  20. s.shutdownOutput();//关闭客户端的输出流。相当于给注中加入一个结束标识。
  21. dos.writeLong(time);
  22. //out.println("over");
  23. BufferedReader bufIn=new BufferedReader(new InputStreamReader(s.getInputStream()));
  24. String str=bufIn.readLine();
  25. System.out.println(str);
  26. bufr.close();
  27. s.close();
  28.  
  29. }
  30. }

服务端:

  1. class TextServer{
  2. public static void main(String [] args){
  3. ServerSocket ss=new ServerSocket(10006);
  4. Socket s=ss.accept();
  5. String ip=s.getInetAddress().getHostAddress();
  6. System.out.println(ip+"....is connected");
  7. //判断标识
  8. DataInputStream dis=new DataInputStream(s.getInputStream());
  9. long l=dis.readLong();//把时间戳读完
  10.  
  11. BufferedReader bufIn=new BufferedReader(new InputStreamReader(s.getInputStream()));
  12. PrintWriter out=new PrintWriter(new FileWriter("server.txt"),true);
  13.  
  14. String line=null;
  15. while((line=bufIn.readLine())!=null){
  16. //if("over".equals(line))
  17. //break;
  18. out.println(line);
  19.  
  20. }
  21.  
  22. PrintWriter pw=new PrintWriter(s.getOutputStream().true);
  23. pw.println("上传成功");
  24. out.close();
  25. s.close();
  26. ss.close();
  27.  
  28. }
  29.  
  30. }



Java基础---Java---网络编程---TCP、UDP、UDP-键盘录入方式数据、Socket、TCP复制文件、UDP-聊天的更多相关文章

  1. 黑马程序员:Java基础总结----网络编程

    黑马程序员:Java基础总结 网络编程   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 网络编程 网络通讯要素 . IP地址 . 网络中设备的标识 . 不易记忆,可用 ...

  2. java基础篇---网络编程(TCP程序设计)

    TCP程序设计 在Java中使用Socket(即套接字)完成TCP程序的开发,使用此类可以方便的建立可靠地,双向的,持续的,点对点的通讯连接. 在Socket的程序开发中,服务器端使用serverSo ...

  3. java基础知识——网络编程、IO流

    IO流 字节流:处理字节数据的流对象,计算机中最小数据单元就是字节.InputStream OutputStream 字符流:字符编码问题,将字节流和编码表封装成对象就是字符流.Reader Writ ...

  4. 黑马程序员——JAVA基础之网络编程

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 网络编程 网络模型:OSI参考模型和TCP/IP参考模型 网络通讯三要素: IP地址:InetA ...

  5. java基础篇---网络编程(IP与URL)

    一:IP与InetAddress 在Java中支持网络通讯程序的开发,主要提供了两种通讯协议:TCP协议,UDP协议 可靠地连接传输,使用三方握手的方式完成通讯 不可靠的连接传输,传输的时候接受方不一 ...

  6. 【Java基础】网络编程

    网络编程 网络编程概述 网络编程的目的:直接或简洁地通过网络协议与其他计算机实现数据交换,进行通讯. 网络编程的两个主要问题: 如果准确地定位网络上一台或多台主机,并定位主机上的特定应用: 找到主机后 ...

  7. 黑马程序员——【Java基础】——网络编程

    ---------- android培训.java培训.期待与您交流! ---------- 一.网络模型概述 网络模型示意图: 说明: (1)数据的传输:在用户端,应用层的数据,经过层层封包,最后到 ...

  8. Java基础之网络编程

    网络编程:1.网络编程概述 (1)网络模型 OSI参考模型 TCP/IP参考模型 (2)网络通讯要素 IP地址 端口号 传输协议 (3)网络通讯前提: **找到对方IP **数据要发送到指定端口.为了 ...

  9. java基础篇---网络编程(UDP程序设计)

    UDP程序设计 在TCP的索引操作都必须建立可靠地连接,这样一来肯定会浪费大量的系统性能,为了减少这种开销,在网络中又提供了另外一种传输协议---UDP,不可靠的连接,这种协议在各个聊天工具中被广泛的 ...

  10. java基础:网络编程TCP,URL

    获取域名的两种方法: package com.lanqiao.java.test; import java.net.InetAddress;import java.net.UnknownHostExc ...

随机推荐

  1. ●BZOJ 3931 [CQOI2015]网络吞吐量

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3931 题解: 在最短路图上跑网络流,要开long long(无奈 BZOJ AC 不了,洛谷 ...

  2. 数据结构 单链表&顺序表

    顺序表: 一般使用数组(C语言中的数组采用顺序存储方式.即连续地址存储)来描述. 优点:在于随机访问元素, 缺点:插入和和删除的时候,需要移动大量的元素. 链表: 优点:插入或删除元素时很方便,使用灵 ...

  3. div,margin,padding

    <!-- 类比礼品盒里装方块月饼.月饼的食用部分(我们把它称之为月饼肉身)要装在小包装盒里,月饼肉身即为content.月饼肉身与直接包裹它的小包装盒(我们把它叫做月饼的衣服)之间的距离叫pad ...

  4. c# datatable row

    在指定索引位置插入新行 string fzmc = rs["fzmc"].ToString(); string mkmc = rs["mkmc"].ToStri ...

  5. node之querystring模块

    前言 querystring 模块提供了一些实用工具,用于解析与格式化 URL 查询字符串. 一.querystring.parse() 用于将一个查询字符串解析为JS 对象. const query ...

  6. SQL执行SQL语句提示 "内存不足"(insufficient memory....)的解决方法

    由于本地执行的sql script的文件太大但是本地sql的运行内存有限,当我在MSSql的工具上运行这份178M左右的脚本的时候 它会提示 如下错误(Insufficient memory to c ...

  7. Win10 下Cmake编译配置 Opencv3.1 + Cuda7.5 + VS2013

    折腾了三天终于配置成功了,在此写下编译配置的全部步骤和遇到的很多坑. 整体介绍: OpenCV 中 CUDA 实现的函数还不是太多,使用前要在OpenCV的官网上确认以下你想要的功能是否已经实现,否则 ...

  8. 0428css样式

    CSS样式表|-引入的三种方式|--内联样式|----标签内部(空格style)|--内嵌样式|----<head></head>标签内部(<style></ ...

  9. MySQL where 子句

    MySQL where 子句 我们知道从MySQL表中使用SQL SELECT 语句来读取数据. 如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句中. 语法 以下是SQL ...

  10. Android文件大头10G

    这个玩意直接10G....记录下. C:\Users\xn\AppData\Local\Android\sdk\system-images\android-23