一、TCP传输
- Socket和ServerSocket
- 建立客户端和服务器端
- 建立连接后,通过Socket中的IO流进行行数据的传输
- 关闭Socket
- 同样,客户端和服务器端是两个独立的应用程序
二、Socket
- 此类实现客户端套接字(也可以就叫“套接字”)。
- 套接字是两台机器间通信的端点。
- 套接字的实际工作由 SocketImpl 类的实例执行。
- 应用程序通过更改创建套接字实现的套接字工厂可以配置它自身,以创建适合本地防火墙的套接字。
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
- 此类实现服务器套接字。
- 服务器套接字等待请求通过网络传入。
- 它基于该请求执行某些操作,然后可能向请求者返回结果。
- 服务器套接字的实际工作由 SocketImpl 类的实例执行。
- 应用程序可以更改创建套接字实现的套接字工厂来配置它自身,从而创建适合本地防火墙的套接字
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{} }
四、示例
- Socket在对象建立时,就可以去连接指定主机
- 因为TCP是面向连接的,所以在建立Socket服务时,就要有服务器端存在
- 连接成功,形成通路后,就可以在该通道进行数据的传输
/** *需求:建立一个文本转换服务器 * 客户端给服务器发送文本,服务端会将文本转换成大写返回给客户端 * 而且客户端可以不断的进行文本转换,当客户端输入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是一个跨平台的C++应用程序开发框架,广泛应用于GUI和非GUI应用程序的开发。在开发过程中,有时我们需要实现文件的网络传输功能,TCP(Transmission Control Protocol)作为传输层的一种...
在Qt框架中,TCP(Transmission Control Protocol)是一种广泛用于网络通信的协议,它提供了一种可靠的、基于连接的数据传输方式。TCP确保了数据的顺序传输和错误检查,这对于文件传输等应用至关重要。本示例主要...
总之,C#通过TCP传输文件涉及网络编程基础、数据序列化和流操作等多个知识点,理解并熟练掌握这些技能,对于开发高效、可靠的网络应用程序至关重要。通过实际操作和学习提供的源代码,能更好地巩固理论知识并提升...
在“labview传输_tcp传输_labview_”这个主题中,我们主要探讨的是如何利用LabVIEW实现TCP(Transmission Control Protocol)传输,这是一种网络通信协议,常用于设备之间的可靠数据交换。 TCP是一种面向连接的协议...
本项目“TCP传输double数据.zip”聚焦于利用TCP协议在客户端和服务器之间传输double类型的浮点数组,这对于分布式计算、数据同步以及其他需要大量数值交换的应用场景极具价值。以下将详细介绍TCP协议、数组传输过程...
在IT行业中,视频编码与传输技术是至关重要的领域,尤其是随着网络视频应用的普及,H264编码和TCP传输已经成为标准配置。本主题聚焦于“基于TCP传输的H264流解码和播放”,这涉及到多个核心知识点,包括H264编码标准...
TCP传输1M数据全过程详解 TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输层协议,它提供了点对点的通信服务。在 TCP 传输数据的过程中,存在着各种机制来确保数据的可靠传输和避免网络拥塞。在...
在描述中提到的11M/s速度,这是TCP传输文件的一个参考指标。实际传输速度受到多种因素影响,包括网络带宽、服务器和客户端的CPU性能、硬盘I/O速度、操作系统优化等。为了提高传输效率,可以考虑使用异步I/O,如`...
本压缩包文件“tcp传输工具.zip”包含了一个能够同时作为客户端和服务端运行的工具,它使得用户可以对TCP和UDP协议进行深入理解和实践。 TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。在TCP中,数据...
在TCP传输中,我们需要将文件内容拆分成多个数据块,逐个发送。 6. **数据发送与接收**:使用`send()`或`write()`函数发送数据,`recv()`或`read()`函数接收数据。TCP协议不保证一次发送的数据能一次性接收,因此...
本主题将深入探讨如何使用MFC在Visual Studio 2010中实现TCP(Transmission Control Protocol)数据传输,特别是针对文件的传输。TCP是一种面向连接、可靠的网络协议,确保数据在互联网上按顺序、无丢失地传递。 ...
在IT领域,TCP(Transmission Control Protocol)是一种广泛使用的网络通信协议,它确保了数据在网络中的可靠传输。在LabVIEW(Laboratory Virtual Instrument Engineering Workbench)环境中,我们可以利用TCP/IP...
这个“Android客户端TCP传输demo”是为开发者提供一个基础的平台,了解和学习如何在Android应用中实现TCP通信,尤其是涉及到文件的上传和下载功能。 TCP协议保证了数据的顺序和完整性,通过三次握手建立连接,并...
1. **TCP传输**:TCP是网络通信中用于传输数据的主要协议,它通过三次握手建立连接,并使用序列号和确认应答来保证数据的可靠传输。 2. **文件传输**:TCP常用于文件传输,因为它可以确保文件在传输过程中的完整性...
TCP(Transmission Control Protocol)传输控制协议是互联网上最常用的一种通信协议之一,它提供了一种可靠的、面向连接的字节流服务。在TCP协议中,数据被分成多个数据段进行传输,并通过序列号、确认应答、重传...
TCP网络传输深层原理分析TCP网络传输深层原理分析TCP网络传输深层原理分析TCP网络传输深层原理分析TCP网络传输深层原理分析TCP网络传输深层原理分析TCP网络传输深层原理分析TCP网络传输深层原理分析TCP网络传输深层...
在这个项目中,"用QT写的TCP传输的文件"是一个很好的起点,尤其是对于初学者来说,它可以帮助理解如何利用QT库来实现基于TCP协议的文件传输功能。TCP(Transmission Control Protocol)是一种面向连接的、可靠的、...
TCP(Transmission Control Protocol)传输控制协议是互联网上最常用的一种通信协议,主要负责在两台计算机之间提供可靠的数据传输服务。TCP确保数据的正确性、顺序性和完整性,它通过建立连接、分段数据、确认传输...
TCPSocket摄像头实时传输视频和图片的C++源码是一个典型的网络编程应用场景,它涉及到的主要知识点包括TCP套接字编程、图像处理以及网络传输优化。下面将详细解释这些概念。 首先,TCP(Transmission Control ...