`
在水伊方
  • 浏览: 107709 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

黑马程序员-java网络编程

阅读更多

----------------------android培训java培训、java学习型技术博客、期待与您交流!----------------------

 

      Java网络编程(即所谓的socket编程),在通信的2个端点之间都有socket,数据就是在这2个socket之间通过IO进行传输的,网络模型主要有:1.OSI参考模型(应用层->表示层->会话层->传输层->网络层->数据链路层->物理层),2.TCP/IP参考模型(应用层->传输层->网际层->主机至网络层)

      网络的通讯要素有:1.IP地址  2.端口号   3.传输协议,这里主要说一下传输协议,协议主要分为2大类(UDP和TCP),它们都是互联网的传输协议,而不同之处主要表现在数据的安全性和完整性方面:

      UDP协议是面向无连接的协议,TCP协议相比是一个不安全的数据传输协议。UDP数据包中的验证信息要比TCP协议少的多。所以对数据安全性和完整性的验证就没有TCP协议安全了,相对TCP的大数据量传输,UDP的每个数据包限制在64k内,因为是不可靠的协议,故不需要建立连接,所以速度较快。

      TCP协议是面向连接的协议,所以是一个安全的数据传输协议,当在校验的过程中发现数据传输错误的话,会立即进行数据的重传,以保证数据的正确性和完整性,是个安全的数据传输协议,此外TCP可以进行大数据量的传输,因为是可靠协议,故必须建立连接,所以在效率方面相对UDP而言会稍低些。

     

      通过UDP协议进行简单的网络传输:

      发送端的代码

     

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class UdpSend {
	public static void main(String[] args) throws Exception {
		// 1.创建udp服务,通过DatagramScoket对象
		DatagramSocket ds = new DatagramSocket();

		// 2.确定数据,并封装成数据包,DatagramPacket(byte[] buf, int length, InetAddress
		// address, int port)
		byte[] buf = "以udp形式发送的数据".getBytes();
		DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress
				.getByName("127.0.0.1"), 10000);

		// 3.通过socket服务,将已有的数据包发送出去,通过send方法
		ds.send(dp);

		// 4.关闭资源
		ds.close();
	}
}

 

     接收端代码

 

import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class UdpReceive {
	public static void main(String[] args) throws Exception {
		// 1.创建udp socket,建立端口
		DatagramSocket ds = new DatagramSocket(10000);

		// 2.定义数据包,用于存储数据
		byte[] buf = new byte[1024];
		DatagramPacket dp = new DatagramPacket(buf, buf.length);

		// 3.通过服务的recieve方法将收到的数据存入数据包中
		ds.receive(dp);	//阻塞式方法

		// 4.通过数据包的方法获取其中的数据
		String ip = dp.getAddress().getHostAddress();
		String data = new String(dp.getData(), 0, dp.getLength());
		int port = dp.getPort();
		System.out.println(ip + "::" + data + "::" + port);
		
		//5.关闭资源
		ds.close();
	}
}

 

      通过TCP协议进行简单的网络传输:

      服务器端代码

     

import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class TcpServer {
	public static void main(String[] args) throws Exception {
		//建立服务端socket,并监听一个端口
		ServerSocket ss = new ServerSocket(9999);
		
		//通过accept方法获取连接过来的客户端对象
		Socket s = ss.accept();
		String ip = s.getInetAddress().getHostAddress();
		System.out.println(ip + ".....connected");
		
		//获取客户端发送过来的数据,那么要使用客户端对象的读取流来读取数据
		InputStream in = s.getInputStream();
		
		byte[] buf = new byte[1024];
		int len = in.read(buf);
		
		System.out.println(new String(buf, 0, len));
		
		s.close();		
		ss.close();
	}
}

    

    客户端代码

   

import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class TcpClient {
	public static void main(String[] args) throws Exception {
		//创建客户端socket服务,指定目的主机和端口
		Socket s = new Socket("127.0.0.1", 9999);
		
		//为了发送数据,应该获取socket流中的输出流
		OutputStream out = s.getOutputStream();		
		out.write("以tcp形式发送的数据".getBytes());
		s.close();
	}
}

        

----------------------android培训java培训、java学习型技术博客、期待与您交流!----------------------

 

详情请查看:http://edu.csdn.net/heima

1
6
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics