33、TCP传输

一、TCP传输

 

  1. Socket和ServerSocket
  2. 建立客户端和服务器端
  3. 建立连接后,通过Socket中的IO流进行行数据的传输
  4. 关闭Socket
  5. 同样,客户端和服务器端是两个独立的应用程序

二、Socket

 

  1. 此类实现客户端套接字(也可以就叫“套接字”)。
  2. 套接字是两台机器间通信的端点。 
  3. 套接字的实际工作由 SocketImpl 类的实例执行。
  4. 应用程序通过更改创建套接字实现的套接字工厂可以配置它自身,以创建适合本地防火墙的套接字。
public class Socket
{
	//通过系统默认类型的 SocketImpl 创建未连接套接字
	public Socket(){}

	//创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
	public Socket(InetAddress address,
              int port)
       throws IOException{}

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

	//关闭此套接字
	public void close()
           throws IOException{}

	//将此套接字连接到服务器
	public void connect(SocketAddress endpoint)
             throws IOException{}

	//将此套接字连接到服务器,并指定一个超时值。超时值零被解释为无限超时。在建立连接或者发生错误之前,连接一直处于阻塞状态。
	public void connect(SocketAddress endpoint,
                    int timeout)
             throws IOException{}

	//返回套接字连接的地址。
	public InetAddress getInetAddress(){}

	//返回此套接字的输入流
	public InputStream getInputStream()
                           throws IOException{}

	//返回此套接字的输出流。
	public OutputStream getOutputStream()
                             throws IOException{}

	//返回此套接字连接到的远程端口
	public int getPort(){}

	//此套接字的输入流置于“流的末尾”。发送到套接字的输入流端的任何数据都将被确认然后被静默丢弃。
	public void shutdownInput()
                   throws IOException{}

	//禁用此套接字的输出流。对于 TCP 套接字,任何以前写入的数据都将被发送,并且后跟 TCP 的正常连接终止序列
	public void shutdownOutput()
                    throws IOException{}
}

 

三、ServerSocket

 

  1. 此类实现服务器套接字。
  2. 服务器套接字等待请求通过网络传入。
  3. 它基于该请求执行某些操作,然后可能向请求者返回结果。 
  4. 服务器套接字的实际工作由 SocketImpl 类的实例执行。
  5. 应用程序可以更改创建套接字实现的套接字工厂来配置它自身,从而创建适合本地防火墙的套接字
public class ServerSocket
{
	//创建非绑定服务器套接字。
	public ServerSocket()
             throws IOException{}

	//创建绑定到特定端口的服务器套接字。端口 0 在所有空闲端口上创建套接字
	//传入连接指示(对连接的请求)的最大队列长度被设置为 50。如果队列满时收到连接指示,则拒绝该连接
	public ServerSocket(int port)
             throws IOException{}

	//利用指定的 backlog 创建服务器套接字并将其绑定到指定的本地端口号。端口号 0 在所有空闲端口上创建套接字
	//传入连接指示(对连接的请求)的最大队列长度被设置为 backlog 参数。如果队列满时收到连接指示,则拒绝该连接
	public ServerSocket(int port,
                    int backlog)
             throws IOException{}

	//侦听并接受到此套接字的连接。此方法在连接传入之前一直阻塞。 
	public Socket accept()
              throws IOException{}

	//关闭此套接字
	public void close()
           throws IOException{}
}

 

四、示例

 

  1. Socket在对象建立时,就可以去连接指定主机
  2. 因为TCP是面向连接的,所以在建立Socket服务时,就要有服务器端存在
  3. 连接成功,形成通路后,就可以在该通道进行数据的传输
/**
 *需求:建立一个文本转换服务器
 *	客户端给服务器发送文本,服务端会将文本转换成大写返回给客户端
 *	而且客户端可以不断的进行文本转换,当客户端输入over时,转换结束
 *分析:
 *	1,建立服务
 *	2,获取键盘录入
 *	3,将数据发给服务器
 *	4,读取服务器返回的大些数据
 *	5,结束,关资源
 */
import java.io.*;
import java.net.*;
class Client
{
	public static void main(String[] args)throws Exception
	{
		//创建客户端的socket服务,指定目的主机和端口
		Socket s = new Socket("192.168.0.253",10000);

		BufferedReader br = 
			new BufferedReader(new InputStreamReader(System.in));

		BufferedReader brIn = 
			new BufferedReader(new InputStreamReader(s.getInputStream()));

		BufferedWriter bwOut = 
			new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));

		String line = null;
		while((line=br.readLine())!=null)
		{
			if("over".equals(line))
				break;
			bwOut.write(line);
			bwOut.newLine();
			bwOut.flush();
			String res = brIn.readLine();
			System.out.println("server: "+res);
		}
		s.close();
		br.close();
	}
}
class Server
{
	public static void main(String[] args)throws Exception
	{
		ServerSocket ss = new ServerSocket(10000);
		
		Socket s = ss.accept();

		String ip = s.getInetAddress().getHostAddress();
		System.out.println(ip+" 连接....");

		BufferedReader brIn = 
			new BufferedReader(new InputStreamReader(s.getInputStream()));

		BufferedWriter bwOut = 
			new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));

		String line = null;
		while((line=brIn.readLine())!=null)
		{
			bwOut.write(line.toUpperCase());
			bwOut.newLine();
			bwOut.flush();
		}
		ss.close();
	}
}

 

/**
 *需求:上传任意文件
 *分析:
 *	1,建立客户端服务
 *	2,定义字节输入流读取硬盘文件
 *	3,将数据发给服务器
 *	4,接收反馈信息
 *	5,结束,关资源
 *	服务端:
 *	1,建立ServerSocket获取连接Socket
 *	2,读取数据,写入硬盘
 *	3,反馈客户端,上传成功
 *  4,关闭资源
 */
import java.io.*;
import java.net.*;
class Client
{
	public static void main(String[] args)throws Exception
	{
		//创建客户端的socket服务,指定目的主机和端口
		Socket s = new Socket("192.168.0.253",10000);

		FileInputStream fis = new FileInputStream("e:/大打印机驱动.rar");

		BufferedReader brIn = 
			new BufferedReader(new InputStreamReader(s.getInputStream()));

		OutputStream os = s.getOutputStream();

		byte[] buf = new byte[1024];
		int len = 0;
		while((len = fis.read(buf))!=-1)
		{
			os.write(buf,0,len);
		}
		//加上结束标记
		s.shutdownOutput();

		String res = brIn.readLine();
		System.out.println(res);
		s.close();
		fis.close();
	}
}
class Server
{
	public static void main(String[] args)throws Exception
	{
		ServerSocket ss = new ServerSocket(10000);
		
		Socket s = ss.accept();

		String ip = s.getInetAddress().getHostAddress();
		System.out.println(ip+" 连接....");

		InputStream is = s.getInputStream();

		FileOutputStream fos = new FileOutputStream("d:/a.rar");

		BufferedWriter bwOut = 
			new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));

		byte[] buf = new byte[1024];
		int len = 0;
		while((len=is.read(buf))!=-1)
		{
			fos.write(buf,0,len);
		}
		bwOut.write("上传成功");
		bwOut.newLine();
		bwOut.flush();
		ss.close();
		fos.close();
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值