`

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();
	}
}

 

分享到:
评论

相关推荐

    Qt_TCP传输文件

    **Qt TCP传输文件详解** Qt是一个跨平台的C++应用程序开发框架,广泛应用于GUI和非GUI应用程序的开发。在开发过程中,有时我们需要实现文件的网络传输功能,TCP(Transmission Control Protocol)作为传输层的一种...

    qt tcp传输文件

    在Qt框架中,TCP(Transmission Control Protocol)是一种广泛用于网络通信的协议,它提供了一种可靠的、基于连接的数据传输方式。TCP确保了数据的顺序传输和错误检查,这对于文件传输等应用至关重要。本示例主要...

    C#通过TCP传输文件.rar_C#网口传输_tcp_tcp传输文件c#_文件传输_服务端与

    总之,C#通过TCP传输文件涉及网络编程基础、数据序列化和流操作等多个知识点,理解并熟练掌握这些技能,对于开发高效、可靠的网络应用程序至关重要。通过实际操作和学习提供的源代码,能更好地巩固理论知识并提升...

    labview传输_tcp传输_labview_

    在“labview传输_tcp传输_labview_”这个主题中,我们主要探讨的是如何利用LabVIEW实现TCP(Transmission Control Protocol)传输,这是一种网络通信协议,常用于设备之间的可靠数据交换。 TCP是一种面向连接的协议...

    TCP传输double数据.zip

    本项目“TCP传输double数据.zip”聚焦于利用TCP协议在客户端和服务器之间传输double类型的浮点数组,这对于分布式计算、数据同步以及其他需要大量数值交换的应用场景极具价值。以下将详细介绍TCP协议、数组传输过程...

    基于TCP传输的H264流解码和播放

    在IT行业中,视频编码与传输技术是至关重要的领域,尤其是随着网络视频应用的普及,H264编码和TCP传输已经成为标准配置。本主题聚焦于“基于TCP传输的H264流解码和播放”,这涉及到多个核心知识点,包括H264编码标准...

    tcp传输1M数据全过程1

    TCP传输1M数据全过程详解 TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输层协议,它提供了点对点的通信服务。在 TCP 传输数据的过程中,存在着各种机制来确保数据的可靠传输和避免网络拥塞。在...

    c# Socket Tcp传输文件

    在描述中提到的11M/s速度,这是TCP传输文件的一个参考指标。实际传输速度受到多种因素影响,包括网络带宽、服务器和客户端的CPU性能、硬盘I/O速度、操作系统优化等。为了提高传输效率,可以考虑使用异步I/O,如`...

    tcp传输工具.zip

    本压缩包文件“tcp传输工具.zip”包含了一个能够同时作为客户端和服务端运行的工具,它使得用户可以对TCP和UDP协议进行深入理解和实践。 TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。在TCP中,数据...

    C++实现的TCP协议的文件传输

    在TCP传输中,我们需要将文件内容拆分成多个数据块,逐个发送。 6. **数据发送与接收**:使用`send()`或`write()`函数发送数据,`recv()`或`read()`函数接收数据。TCP协议不保证一次发送的数据能一次性接收,因此...

    MFC实现TCP数据传输

    本主题将深入探讨如何使用MFC在Visual Studio 2010中实现TCP(Transmission Control Protocol)数据传输,特别是针对文件的传输。TCP是一种面向连接、可靠的网络协议,确保数据在互联网上按顺序、无丢失地传递。 ...

    TCP通讯_labview之Tcp/IP进行图像传输_

    在IT领域,TCP(Transmission Control Protocol)是一种广泛使用的网络通信协议,它确保了数据在网络中的可靠传输。在LabVIEW(Laboratory Virtual Instrument Engineering Workbench)环境中,我们可以利用TCP/IP...

    Android 客户端tcp传输demo

    这个“Android客户端TCP传输demo”是为开发者提供一个基础的平台,了解和学习如何在Android应用中实现TCP通信,尤其是涉及到文件的上传和下载功能。 TCP协议保证了数据的顺序和完整性,通过三次握手建立连接,并...

    TCP.rar_TCP 传输_TCP 文件传输_socket+文件传输_tcp文件传输_文件传输 C

    1. **TCP传输**:TCP是网络通信中用于传输数据的主要协议,它通过三次握手建立连接,并使用序列号和确认应答来保证数据的可靠传输。 2. **文件传输**:TCP常用于文件传输,因为它可以确保文件在传输过程中的完整性...

    用tcp协议传输文件

    TCP(Transmission Control Protocol)传输控制协议是互联网上最常用的一种通信协议之一,它提供了一种可靠的、面向连接的字节流服务。在TCP协议中,数据被分成多个数据段进行传输,并通过序列号、确认应答、重传...

    TCP网络传输深层原理分析

    TCP网络传输深层原理分析TCP网络传输深层原理分析TCP网络传输深层原理分析TCP网络传输深层原理分析TCP网络传输深层原理分析TCP网络传输深层原理分析TCP网络传输深层原理分析TCP网络传输深层原理分析TCP网络传输深层...

    用QT写的TCP传输的文件,新手可以参考一下

    在这个项目中,"用QT写的TCP传输的文件"是一个很好的起点,尤其是对于初学者来说,它可以帮助理解如何利用QT库来实现基于TCP协议的文件传输功能。TCP(Transmission Control Protocol)是一种面向连接的、可靠的、...

    tcp 传输图片文件

    TCP(Transmission Control Protocol)传输控制协议是互联网上最常用的一种通信协议,主要负责在两台计算机之间提供可靠的数据传输服务。TCP确保数据的正确性、顺序性和完整性,它通过建立连接、分段数据、确认传输...

    TCPSocket摄像头实时传输视频和图片传输的c++源码

    TCPSocket摄像头实时传输视频和图片的C++源码是一个典型的网络编程应用场景,它涉及到的主要知识点包括TCP套接字编程、图像处理以及网络传输优化。下面将详细解释这些概念。 首先,TCP(Transmission Control ...

Global site tag (gtag.js) - Google Analytics