网络编程三要素详解

349 阅读2分钟
网络编程三要素

【1】IP地址:唯一标识网络上的每一台计算机

两台计算机之间通信的必要素

【2】端口号:计算机中应用的标号(代表一个应用程序)

0-1024系统使用或保留端口 ,

有效端口0-65536

【3】通信协议:通信的规则

TCP,UDP


1. IP地址

1.1 IP地址的表示方法


1.2 IP地址所对应对象->InetAddress的方法


2. 端口

端口:port

端口是虚拟的概念,并不是说在主机上真的有若干个端口。通过端口,可以在一个主机上运行多个网络应用程序。


3. 传输协议

3.1

UDP:相当于发短信(有字数限制),

不需要建立连接,

数据包的大小限制在64k内,

效率较高,不安全,容易丢包


TCP:相当于打电话,需要建立连接,

效率相对比较低,数据传输安全,

三次握手完成。

(客户端和服务端建立连接,给服务端发送“心跳包(没啥内容,就是试探性的)",服务端接收后给客户端返回,客户端接收服务端返回的信息后建立连接)

(点名答到确认)


3.2 基于
TCP协议的Socket编程
3.2.1 Socket概念 :


3.2.2 基于TCP协议的Socket编程

客户端编写:


服务端编写:

3.2.3 Socket中对象的传递


3.2.4 使用多线程进行网络编程
ThreadLogin类:

public class ThreadLogin extends Thread{

	private Socket client;


	@Override
	public void run() {
		try {
			Thread.sleep(5000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//获取客户端的输入流
		InputStream is;
		ObjectInputStream ois;
		Object obj;
		try {
			is = client.getInputStream();
			ois = new ObjectInputStream(is);
			obj = ois.readObject();
			System.out.println(obj);
			ois.close();
			is.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}



Server 类:

public class Server {
	
	public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
		
		ServerSocket server = new ServerSocket(8889);
		while (true) {
			//一旦有客户端接入,获取客户端
			Socket client = server.accept();
			new ThreadLogin(client).start();;
		}
		
		
	}
}



Client类:

public class Client {

	public static void main(String[] args) throws UnknownHostException, IOException {
		
		for (int i = 0; i < 10; i++) {
			Socket client = new Socket(InetAddress.getLocalHost(),8889);
			OutputStream os = client.getOutputStream();
			//将输出流转换成对象流
			ObjectOutputStream oos = new ObjectOutputStream(os);
			oos.writeObject(new User("小明","abs12345"));
			oos.flush();
			client.shutdownOutput();
			oos.close();
			os.close();
		}
		
	}
}