黑马程序员——Java基础——网络编程

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

网络编程
网络通信三要素
1.IP地址:InetAddress

网络中设备的标识,不易记忆,可用主机名

2.端口号

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

范围:0-65535。其中0-1024不建议使用

3.传输协议

通讯的规则

常见协议:TCP,UDP

UDP:将数据源和目的封装成数据包中,不需要建立连接;每个数据报的大小在限制在64k;因无连接,是不可靠协议;不需要建立连接,速度快

TCP:建立连接,形成传输数据的通道;在连接中进行大数据量传输;通过三次握手完成连接,是可靠协议;必须建立连接,效率会稍低

InetAddress

获取任意主机:getByName

主机名:getHostName

主机Ip地址:getHostAddress

Socket机制

A:通信两端都应该有Socket对象

B:所有的通信都是通过Socket间的IO进行操作的

UDP协议发送和接收数据

发送:

1.创建UDP发送端的Socket对象

2.创建数据并把数据打包

3.发送数据

4.释放资源

代码:

public class UDPSend
{
	public static void main(String[] args) throws Exception{
		//1.创建UDP服务
		DatagramSocket ds = new DatagramSocket();
		//2.创建数据包
		byte[] data = "UDP测试".getBytes();
		DatagramPacket dp  = new DatagramPacket(data , data.length,InetAddress.getByName("127.0.0.1"),10000);

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

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


接收:

1.创建UDP接收端的Socket对象

2.创建数据包用于接收数据

3.接收数据

4.解析数据包

5.释放资源

代码

public class UDPReceive
{
	public static void main(String[] args) throws Exception{
		//1.创建UDP服务
		DatagramSocket ds = new DatagramSocket(10000);
		//2.定义数据包
		while(true){
			byte[] data = new byte[1024];
			DatagramPacket dp  = new DatagramPacket(data , data.length);

			//3.通过Socket服务receive存数据
			ds.receive(dp);
		
			//4.获取数据
			String ip = dp.getAddress().getHostAddress();
			String pdata = new String(dp.getData());
			//关闭
			System.out.println(ip+"  "+pdata);
			//ds.close();
		}
	}
}


TCP协议发送和接收数据

发送:

1.创建TCP客户端的Socket对象

2.获取输出流,写数据

3.释放资源


代码:

import java.net.*;
import java.io.*;

class SocketClient
{
	//Client
	public static void main(String[] args) throws Exception{
		//创建客户端Socket服务,指定目的主机和端口
		Socket s = new Socket("127.0.0.1",10003);
		
		//发送数据获取输出流
		OutputStream out = s.getOutputStream();
		out.write("TCP测试".getBytes());

		//关闭
		s.close();
	}
}


接收:

1.创建TCP服务器端的Socket对象

2.监听客户端连接

3.获取输入流,读取数据

4.释放资源

代码:

import java.net.*;
import java.io.*;
class SocketServer
{
	public static void main(String[] args) throws Exception{
		//Server
		ServerSocket ss = new ServerSocket(10003);
		
		//获取客户端对象,阻塞式
		Socket s = ss.accept();

		//获取
		InputStream in = s.getInputStream();
		
		byte[] buf = new byte[1024];
		int len = in.read();

		System.out.println(new String(buf, 0 ,len)+"  "+s.getInetAddress().getHostAddress());
		
		s.close();
	}
}


你可能感兴趣的:(java,网络编程)