TCP传输
TCP传输
Socket和ServerSocket
建立客户端和服务器端
建立连接后,通过Socket中的IO流进行数据的传输
关闭socket
同样,客户端与服务器端是两个独立的应用程序。
基本思路(客户端)
客户端需要明确服务器的ip地址以及端口,这样才可以去试着建立连接,如果连接失败,会出现异常。
连接成功,说明客户端与服务端建立了通道,那么通过IO流就可以进行数据的传输,而Socket对象已经提供了输入流和输出流对象,通过getInputStream(),getOutputStream()获取即可。
与服务端通讯结束后,关闭Socket。
基本思路(服务端)
服务端需要明确它要处理的数据是从哪个端口进入的。
当有客户端访问时,要明确是哪个客户端,可通过accept()获取已连接的客户端对象,并通过该对象与客户端通过IO流进行数据传输。
当该客户端访问结束,关闭该客户端。
演示tcp传输。
1,tcp分客户端和服务端。
2,客户端对应的对象是Socket。
服务端对应的对象是ServerSocket。
客户端,
通过查阅socket对象,发现在该对象建立时,就可以去连接指定主机。
因为tcp是面向连接的。所以在建立socket服务时,
就要有服务端存在,并连接成功。形成通路后,在该通道进行数据的传输。
需求:给服务端发送给一个文本数据。
步骤:
1,创建Socket服务。并指定要连接的主机和端口。
import java.io.*; import java.net.*; class TcpClient { public static void main(String[] args) throws Exception { //创建客户端的socket服务。指定目的主机和端口 Socket s = new Socket("192.168.1.254",10003); //为了发送数据,应该获取socket流中的输出流。 OutputStream out = s.getOutputStream(); out.write("tcp ge men lai le ".getBytes()); s.close(); } }
需求:定义端点接收数据并打印在控制台上。
服务端:
1,建立服务端的socket服务。ServerSocket();
并监听一个端口。
2,获取连接过来的客户端对象。
通过ServerSokcet的 accept方法。没有连接就会等,所以这个方法阻塞式的。
3,客户端如果发过来数据,那么服务端要使用对应的客户端对象,并获取到该客户端对象的读取流来读取发过来的数据。
并打印在控制台。
4,关闭服务端。(可选)
class TcpServer { public static void main(String[] args) throws Exception { //建立服务端socket服务。并监听一个端口。 ServerSocket ss = new ServerSocket(10003); //通过accept方法获取连接过来的客户端对象。 while(true) { Socket s = ss.accept(); String ip = s.getInetAddress().getHostAddress(); System.out.println(ip+".....connected"); //获取客户端发送过来的数据,那么要使用客户端对象的读取流来读取数据。 InputStream in = s.getInputStream(); byte[] buf = new byte[1024]; int len = in.read(buf); System.out.println(new String(buf,0,len)); s.close();//关闭客户端. } //ss.close(); } }
演示tcp的传输的客户端和服务端的互访。
需求:客户端给服务端发送数据,服务端收到后,给客户端反馈信息。
客户端:
1,建立socket服务。指定要连接主机和端口。
2,获取socket流中的输出流。将数据写到该流中。通过网络发送给服务端。
3,获取socket流中的输入流,将服务端反馈的数据获取到,并打印。
4,关闭客户端资源。
import java.io.*; import java.net.*; class TcpClient2 { public static void main(String[] args)throws Exception { //建立服务,指定主机端口 Socket s = new Socket("192.168.1.254",10004); //得到输出流对象 OutputStream out = s.getOutputStream(); //将数据写入 out.write("服务端,你好".getBytes()); //得到输入流的对象 InputStream in = s.getInputStream(); byte[] buf = new byte[1024]; //读取数据 int len = in.read(buf); System.out.println(new String(buf,0,len)); s.close(); } } class TcpServer2 { public static void main(String[] args) throws Exception { ServerSocket ss = new ServerSocket(10004); Socket s = ss.accept(); //得到地址 String ip = s.getInetAddress().getHostAddress(); System.out.println(ip+"....connected"); //得到输入流对象 InputStream in = s.getInputStream(); byte[] buf = new byte[1024]; //读取数据 int len = in.read(buf); System.out.println(new String(buf,0,len)); //得到服务端输出流 OutputStream out = s.getOutputStream(); Thread.sleep(10000); //写入数据 out.write("哥们收到,你也好".getBytes()); s.close(); ss.close(); } }
需求:建立一个文本转换服务器。
客户端给服务端发送文本,服务单会将文本转成大写在返回给客户端。
而且客户度可以不断的进行文本转换。当客户端输入over时,转换结束。
分析:
客户端:
既然是操作设备上的数据,那么就可以使用io技术,并按照io的操作规律来思考。
源:键盘录入。
目的:网络设备,网络输出流。
而且操作的是文本数据。可以选择字符流。
步骤
1,建立服务。
2,获取键盘录入。
3,将数据发给服务端。
4,后去服务端返回的大写数据。
5,结束,关资源。
都是文本数据,可以使用字符流进行操作,同时提高效率,加入缓冲。
import java.io.*; import java.net.*; class TransClient { public static void main(String[] args) throws Exception { //建立服务 Socket s = new Socket("192.168.1.254",10005); //定义读取键盘数据的流对象。 BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in)); //定义目的,将数据写入到socket输出流。发给服务端。 //BufferedWriter bufOut = //new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); PrintWriter out = new PrintWriter(s.getOutputStream(),true); //定义一个socket读取流,读取服务端返回的大写信息。 BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream())); String line = null; //读取录入的数据 while((line=bufr.readLine())!=null) { if("over".equals(line)) break; //将数据写入到服务端 out.println(line); // bufOut.write(line); // bufOut.newLine(); // bufOut.flush(); //读取服务端的返回信息 String str =bufIn.readLine(); System.out.println("server:"+str); } bufr.close(); s.close(); } }
服务端:
源:socket读取流。
目的:socket输出流。
都是文本,装饰。
class TransServer { public static void main(String[] args) throws Exception { //建立服务,监听端口 ServerSocket ss = new ServerSocket(10005); Socket s = ss.accept(); String ip = s.getInetAddress().getHostAddress(); System.out.println(ip+"....connected"); //读取socket读取流中的数据。 BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream())); //目的。socket输出流。将大写数据写入到socket输出流,并发送给客户端。 //BufferedWriter bufOut = //new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); PrintWriter out = new PrintWriter(s.getOutputStream(),true); String line = null; while((line=bufIn.readLine())!=null) { System.out.println(line); out.println(line.toUpperCase()); // bufOut.write(line.toUpperCase()); // bufOut.newLine(); // bufOut.flush(); } s.close(); ss.close(); } }
该例子出现的问题。
现象:客户端和服务端都在莫名的等待。
为什么呢?
因为客户端和服务端都有阻塞式方法。这些方法么没有读到结束标记。那么就一直等
而导致两端,都在等待。
相关推荐
TCP socket编程,服务器和客户端传输
Network programming TCP FILE UPLOAD NETWORK PROGRAMMING TCP FILE UPLOAD NETWORK PROGRAMMING TCP FILE UPLOAD
socket 网络编程 TCP协议 UDP协议 服务器和客户端之间的传输
C语言,客户端通过TCP协议将文件以二进制形式传输给服务端,代码含注释,不懂可以私信我.zip
windows网络编程 MFC下使用TCP/IP协议编写的文件传输程序希望能对于学习windows网络编程的初学者有定的帮助
11-网络编程(TCP传输).avi
12-网络编程(TCP传输2).avi
Linux下网络编程TCP客户端和服务器端数据传输代码的实现,c语言程序,使用前请阅读readme.txt
Linux下的网络编程,tcp协议,实现文件,数据的传输
linux下多线程网络编程TCP服务器端数据传输代码,C语言程序,使用前请阅读readme.txt
Qt 网络编程 TCP传输
主要介绍了Python网络编程之使用TCP方式传输文件操作,结合实例形式分析了使用socket模块进行tcp协议下文件传输的原理以及服务器端、客户端相关实现技巧,需要的朋友可以参考下
TCP/UDP协议是网络通信的基础,其中TCP协议提供面向连接的可靠数据传输,而UDP协议则提供无连接的不可靠数据传输。在Linux网络编程中,开发者需要了解这两种协议的实现原理以及使用方法。 除了基本的协议,Linux...
这是tcpip的编程技术的课程的报告和源码,这个当中有例子,有报告,是学习MFC和网络编程的好资料
《TCP/IP网络编程》涵盖操作系统、系统编程、TCP/IP协议等多种内容,结构清晰、讲解细致、通俗易懂。书中收录丰富示例,详细展现了Linux和Windows平台下套接字编程的共性与个性。特别是从代码角度说明了不同模型...
TCP IP协议与网络编程教程和实例 第1章 Internet与TCP/IP协议 第2章 IP协议 第3章 传输层协议UDP和TCP 第4章 TCP/IP应用层常用协议 第5章 TCP/IP协议代码实例分析 第6章 网络程序设计基本知识 第7章 TCP/IP...
该资源只是简单的实现TCP文件的传输,仅供初学者,没有生命太大的技术含量,下载者请注意
MFC编写的文件传输程序,支持大文件传输包括了客户端和服务器 希望对学习网络编程的人有帮助
也就是说,它能使一台计算机上的数据无差错的发往网络上的其他计算机,所以当要传输大量数据时,我们选用TCP协议。 TCP协议的程序使用的是客户端/服务器模式,在Qt5中提供了QTcpSocket类来编写客户端程序,使用...
第1章 Internet与TCP/IP协议 第2章 IP协议 第3章 传输层协议UDP和TCP 第4章 TCP/IP应用层常用协议 第5章 TCP/IP协议代码实例分析 第6章 网络程序设计基本知识 第7章 TCP/IP网络程序框架与...