java数据的传输

  • Tcp传输


Tcp传输

使用javaee 打交道 的是服务器(客户端);
数据的传输的方式有osi参考模型和tcp ip参考模型。
概述:
osi参考模型:模型过于理想化 应用层 表示层 会话层 传输层 网络层数据 链路层物理层
tcp ip参考模型: 就是一种规范 应用层(协议:http ftp dns) 传输层(协议:tcp udp) 网络层(协议:ip) 物理+数据链路层(协议:link)

tcp协议的传输要注意的是:
使用tcp协议之前先建立要连接数据传输,传输之前,一定采用三次握手的协议,确保是可靠传输。
客户端和服务端,进行大量的数据传输 释放连接,效率慢。

练习:
我使用的是MyEclipse和Eclipse方式进行配合。
一个当成发送端,一个作为接受端。

发送信息—发送端代码:

public void client() {
//	套接字   ip地址加端口号
		OutputStream os =null;
		Socket socket=null;
		try {
			InetAddress byName = InetAddress.getByName("127.0.0.1");
			socket = new Socket(byName, 8899);
			os= socket.getOutputStream();
			os.write("admin,hellweqeo, i is sdsa".getBytes());
		} catch (Exception e) {
			// TODO: handle exception
		}finally{
			if(os != null){
				try {
					os.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if(socket != null){
				try {
					socket.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}

接受端的代码:

public static void main  (String[] args) throws Exception{
		System.out.println("等待收到的数据");
//		创建服务器,指明自己的端口号
		ServerSocket ss = new ServerSocket(8899);
		Socket socket = ss.accept();
		InputStream stream = socket.getInputStream();
		byte [] by=new byte[1024];
		int len;
		while((len=stream.read(by))!=-1){
			String str = new String(by,0,len);
			System.out.println(str);
		}

运行的结果:

我们先运行接受端,将服务打开:

java网络传输 java数据传输方式_socket


继续运行发送端的数据:

java网络传输 java数据传输方式_http_02


然后我们回到接收端:

java网络传输 java数据传输方式_socket_03


我们可以看到,数据就被传输过去了。

不仅仅可以进行文字的传输,还可以进行图片的传输。

图片的传输方式:

发送端:

@Test
  public void clientSendImg() throws Exception{
Socket socket = new Socket(InetAddress.getByName("127.0.0.1"),8899);
OutputStream ou = socket.getOutputStream();
		FileInputStream fis=new FileInputStream(new File("u.jpg"));
		byte []b=new byte[1024];
		int len;
		while((len=fis.read(b))!=-1){
			ou.write(b,0,len);
		}		
		fis.close();
		ou.close();
		socket.close();
	}

接受端:

public static void main(String[] args) throws Exception {
			System.out.println("等待收到的图片的数据");
			ServerSocket s= new ServerSocket(8899);
			Socket accept = s.accept();
			InputStream is=accept.getInputStream();
			FileOutputStream fos=new FileOutputStream(new File("u-c.jpg"));
			byte []b=new byte[1024];
			int len;
			while((len=is.read(b))!=-1){
				fos.write(b,0,len);
			}
			fos.close();
			is.close();
			accept.close();
			s.close();
		System.out.println("接受完毕!");
	}

结果运行图:

也是先开始运行服务端,就是接收端的服务。

java网络传输 java数据传输方式_java网络传输_04


java网络传输 java数据传输方式_socket_05


然后运行发送端的数据:

java网络传输 java数据传输方式_java网络传输_06


java网络传输 java数据传输方式_网络_07


然后我们再回接收端:

java网络传输 java数据传输方式_http_08


出现接受成功了。我们刷新一下文件。

java网络传输 java数据传输方式_java网络传输_09


打开看看。我们可以看到图片完全被复制过来了。