Socket编程

1.网络模型  七层 四层

2.网络三要素

2.1  IP地址         标识网络中唯一主机的一个地址
2.2   端口           是用来访问应用程序   有效端口:0~65535,其中0~1023系统使用或保留端口。
2.3   协议           怎样去访问信息   TCP   UDP

3.TCP与UDP的区别

Socket编程

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

TCP

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

4.java.net.InetAddress类

这个类没有对外提供构造方法,只对外提供了可以获得这个类对象的类方法.
1.public static InetAddress getByName(String host)
        作用:根据主机名获得InetAddress对象
        
  2.public static InetAddress[] getAllByName(String host);
  作用:根据主机名获得所有对应的IP地址对象
  
  3.public static InetAddress getLocalHost();
    作用: 获得本机IP地址对象
   
  4. public String getHostName();
  作用:根据InetAddress对象获得主机名
 
  5.public String getHostAddress()
  作用:根据InetAddress对象获得ip地址
 
  6.public byte[] getAddress()
  作用  :将获得的ip地址封装到byte[]中。

5.Socket介绍

Socket就是为网络服务提供的一种机制。
通信的两端都有Socket。
网络通信其实就是Socket间的通信。

数据在两个Socket间通过IO传输。

6.基于TCP协议下的点对点信息交互

TCP传输的步骤
 *  1.建立服务器端    ServerSocket对象  需要指定端口
 *  2.建立客户端       Socket对象     需要知道 服务器ip  提供的端口号
 *  3.在服务器端使用accept方法接收一个客户端连接,得到一个Socket对象,这个对象与客户端的Socket是一对。
 *  4.可以使用Socket对象获得输入输出流,在客户端与服务器端进行信息交互.

7. 代码

Demo1.java

package cn.itcast.lession3;
//TCP协议下的网络传输
/*  1.必须建立可靠的连接
 *  2.可以传输大数据
 *  3.经过三次握手
 * 
 *  Socket端点,才可以进行信息的传输,因为可以通过Socket得到输入输出流。
 *  TCP传输的步骤
 *  1.建立服务器端    ServerSocket对象  需要指定端口
 *  2.建立客户端       Socket对象     需要知道 服务器ip  提供的端口号
 * 	3.在服务器端使用accept方法接收一个客户端连接,得到一个Socket对象,这个对象与客户端的Socket是一对。
 *  4.可以使用Socket对象获得输入输出流,在客户端与服务器端进行信息交互.
 * */
public class Demo1 {

}
服务器端:Demo1Server.java
//服务器端
public class Demo1Server {

	public static void main(String[] args) {
		// 创建服务器 指定端口
		try {
			ServerSocket server = new ServerSocket(7788);
			System.out.println("创建服务器成功");
			// 要响应客户端的连接
			// while (true) {
			Socket s = server.accept(); // 这个方法是堵塞的方法
			System.out.println("有一个客户端连连接" + s.getInetAddress());
			BufferedReader br = new BufferedReader(new InputStreamReader(
					System.in));
			DataOutputStream dos = new DataOutputStream(s.getOutputStream());
			DataInputStream dis = new DataInputStream(s.getInputStream());
			while (true) {
				// 服务回端向连接上的客户端发送信息

				System.out.println("请输入要发送到客户端的信息:");
				dos.writeUTF(br.readLine()); // 让这个信息是从键盘录入的
				dos.flush();
				// }
				// 服务器端读取客户端的信息

				String msg = dis.readUTF();
				System.out.println("服务器读取到的客户端的信息:" + msg);
			}

		} catch (IOException e) {
			System.out.println("服务器建立失败");
		}
	}
}
客户端:Demo1Client.java
public class Demo1Clietn {
	public static void main(String[] args) {

		// 建立客户端
		try {
			Socket client = new Socket("127.0.0.1", 7788); // 向服务器请求连接
			System.out.println("连接服务器成功");
			BufferedReader br = new BufferedReader(new InputStreamReader(
					System.in));
			DataOutputStream dos = new DataOutputStream(
					client.getOutputStream());
			DataInputStream dis = new DataInputStream(client.getInputStream());
			while (true) {
				// 客户端读取服务器写入的信息

				String msg = dis.readUTF();
				System.out.println("读取到的服务器发送的信息:" + msg);

				// 客户端向服务器端输出信息

				System.out.println("请输入要发送到服务器端的信息:");
				dos.writeUTF(br.readLine()); // 也是从键盘录入的
				dos.flush();
			}
		} catch (UnknownHostException e) {
			System.out.println("服务器不存在");
		} catch (IOException e) {
			System.out.println("建立客户端失败");
		}

	}
}

你可能感兴趣的:(Socket编程)