JAVA学习第六十一课 — TCP协议

TCP传输

Socket和ServerSocket

建立客户端和服务器端(两个独立的应用程序)

建立连接后,通过Socket中的IO流进行数据的传输

关闭Socket

TCP和UDP原理差不多,只是涉及的对象不一样

TCP:是一种传输层协议,是一种面向连接的协议,经过三次握手客户端和服务端连接一个连接(通道)。TCP传输数据时稳定。

UDP:是一种传输协议,是一种数据报协议,速度是很快的,但是不是很稳定的,容易丢包,丢了也不管。


TCP客户端

Socket(String host, int port)
创建一个流套接字并将其连接到指定主机上的指定端口号。

public static void TCPDemo() throws UnknownHostException, IOException {
		
		/*
		 * TCP传输,客户端建立
		 * 1.建立TCP客户端socket服务,使用SOCKET对象(建议一创建就明确目的地,要连接的主机)
		 * 2.如果连接建立成功,就说明数据传输通道已建立
		 * 该通道就是SOCKET流,是底层建立好的,因为是流,所以有输入输出,其输入输出流对象,在SOCKET获取
		 * 通过getInputStream()和getOutputStream()来获取两个字节流
		 * 3.使用输出流,将数据写出(网络)
		 * 4.关闭
		 */
		
		//建立客户端SOCKET服务
		Socket socket = new Socket("127.0.0.1",6534);//地址和端口号
		
		//获取SOCKET流中的输出流
		OutputStream os = socket.getOutputStream();
		
		//使用输出流将指定的数据写出
			os.write("tcp客户端发送信息".getBytes());
			
			socket.close();	
	}

TCP服务端

public static void TEPserveDeno() throws IOException {
		//服务端接收客户端发来的数据,并打印在控制台
		/*
		 * 建立TCP服务端
		 * 1.建立TCP服务端Socket服务,通过ServerSocket对象
		 * 2.服务端必须对外提供端口,否则客户端无法连接
		 * 3.获取连接过来的客户端对象(重点)
		 * (比如拨打10086人工,一个客户,一个服务人员,客户的数据,客户自己最清楚)
		 * 4.通过客户端对象获取Socket流兑取客户端发来的数据并打印
		 * 5.关闭资源:关闭客户端,关闭服务端
		 */
		//常见服务端对象
		ServerSocket ss = new ServerSocket(6534);
		
		//获取连接过来的客户端对象
		Socket so = ss.accept();//此方法用来获取客户端对象
		String ip = so.getInetAddress().getHostAddress();
		//通过Socket对象获取输入流,读取客户端发来的数据
		InputStream in = so.getInputStream();
		
		byte[] buf = new byte[1024];
		int len = in.read(buf);
		String str = new String(buf,0,len);
		System.out.println("ip : "+ip+"server : "+str);
		
		so.close();//服务端一般是不关闭的
	}

注意:TCP和UDP不一样的是,必须先开启服务端,服务端不打开,客户端就无法访问,而UDP随意


服务端和客户端交互

客户端发送数据过去,服务端返回信息,表示收到


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

public class Main {
	public static void main(String[] args) throws IOException{
		TCPDemo();
		TCPserveDeno();
	}

	public static void TCPserveDeno() throws IOException {
	
		ServerSocket ss = new ServerSocket(6534);
		
		Socket so = ss.accept();//阻塞式的
		String ip = so.getInetAddress().getHostAddress();
	
		InputStream in = so.getInputStream();
		
		byte[] buf = new byte[1024];
		int len = in.read(buf);
		String str = new String(buf,0,len);
		System.out.println("ip : "+ip+"server : "+str);
		
		//使用客户端Socket对象输出流返回数据
		OutputStream out = so.getOutputStream();
		out.write("收到信息".getBytes());
		
		so.close();
	}

	public static void TCPDemo() throws UnknownHostException, IOException {
		
		Socket socket = new Socket("127.0.0.1",6534);
		
		OutputStream os = socket.getOutputStream();
		
		os.write("tcp客户端发送信息".getBytes());
		
		//读取服务端返回的数据,使用Socket读取流
		InputStream in = socket.getInputStream();
		byte[] buf = new byte[1024];
		int len = in.read(buf);
		String text = new String(buf,0,len);
		System.out.println(text);
		socket.close();	
	}
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值