java网络编程基础

1. UDP

DatagramSocket类:

  1. send()与receive()方法
  2. 绑定一个IP和Port

DatagramPacket类:

  1. 集装箱机制:封装数据
  2. 地址标签:目的地IP+目的地Port

接收方必须先于发送方运行

import java.net.*;
public class send//发送端
{
	public static void main(String [] args) throws Exception
	{
		DatagramSocket ds=new DatagramSocket();
		String str="hello world";
		DatagramPacket dp=new DatagramPacket(str.getBytes(),str.length(),
				InetAddress.getByName("127.0.0.1"),3000);
		
		System.out.println("Send: 准备发送信息");
		ds.send(dp);
		System.out.println("Send: 发送信息结束");				
		ds.close();
	}
}
import java.net.*;
public class receive//接收端
{
	public static void main(String[] args) throws Exception
	{
		DatagramSocket	ds=new DatagramSocket(3000);
		byte [] buf=new byte[1024];
		DatagramPacket dp=new DatagramPacket(buf,1024);
		
		System.out.println("Recv: 我在等待信息");
		ds.receive(dp);//阻塞,等待发送端连接
		System.out.println("Recv: 我接收到信息");
		String strRecv=new String(dp.getData(),0,dp.getLength()) +
		" from " + dp.getAddress().getHostAddress()+":"+dp.getPort(); 
		ds.close();
	}
}

2. TCP

TCP协议:有链接、保证可靠的无误差通讯:

  1. 服务器:创建一个ServerSocket,等待连接
  2. 客户机:创建一个Socket,连接到服务器
  3. 服务器:ServerSocket接收到连接,创建一个Socket和客户的Socket建立专线连接,后续服务器和客户机的对话(这一对Socket)会在一个单独的线程(服务器端)上运行。
  4. 服务器的ServerSocket解除与客户端连接,处于阻塞状态,继续等待连接,返回第一步。

ServerSocket:等待响应的服务器端口:

  1. 需要绑定port,IP

Socket:运输通道:

  1. 客户端需要绑定服务器的IP和Port
  2. 客户端往Socket输入流写入数据,送到服务端
  3. 客户端从Socket输出流取服务器端过来的数据
  4. 同一个通道,服务端的输出流就是客户端的输入流;服务端的输入流就是客户端的输出流
import java.net.*;
import java.io.*;
public class TcpServer
{
	public static void main(String [] args) 
	{
		try
		{
			ServerSocket ss=new ServerSocket(8001); //服务端Socketserver在8001端口监听
			Socket s=ss.accept();                   //阻塞,等到有客户端Socket连接new Socket()
			System.out.println("i am server");
			//InputStream ips=s.getInputStream();     //使用socket.getInputStream()获取输入流
			OutputStream ops=s.getOutputStream();   //使用socket.getOutputStream()获取输出流
			ops.write("Hello, Client!".getBytes());  //输出流write()
			//ips.close();          
			ops.close();
			s.close();
			ss.close();
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
	}
}
import java.net.*;
import java.io.*;

public class TcpClient {
	public static void main(String[] args) {
		try {
			Socket s = new Socket(InetAddress.getByName("127.0.0.1"), 8001); //建立一个socket连接
			System.out.println("i am client");
			InputStream ips = s.getInputStream();    //使用socket.getInputStream()获取输入流
			BufferedReader br = new BufferedReader(new InputStreamReader(ips));//包装

			System.out.println("Server said: " + br.readLine());//使用BufferRead的readline()读取避免乱码
			br.close();
			s.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
原文地址:https://www.cnblogs.com/innndown/p/12378387.html