Java TCP使用Socket进行网络文件传送(5)

作者 : 卿笃军

原文地址:http://blog.csdn.net/qingdujun/article/details/39324737

本文演示,TCP使用Socket进行网络文件传送,实现将客户端的文件upload.txt上传到服务器。

1)客户端,上传文件upload.txt,并接受服务器反馈上传成功与否消息。

2)服务器,接受客户端文件,将接收到的文件命名为Rece.txt,同时给客户端发送消息“上传成功”。

客户端,代码如下:

package upload.file.client;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

//客户端:上传文件
public class CUploadFileClient {

	public static void main(String[] args) throws Exception {
		Socket s = new Socket("127.0.0.1",8686);
		BufferedReader bufr = new BufferedReader(new FileReader("upload.txt"));
		PrintWriter out = new PrintWriter(s.getOutputStream(),true);
		String line = null;
		//狂读数据
		while ((line = bufr.readLine()) != null)
		{
			//读一行,发送一行
			out.println(line);
		}
		//关闭客户端输出流,相当于给流中加结束标记
		s.shutdownOutput();
		//接受服务端消息
		BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
		String str = bufIn.readLine();
		//打印服务器发送过来的消息
		System.out.println(str);
		//关闭资源
		bufr.close();
		bufIn.close();
		s.close();
	}
}

服务端,代码如下:

package upload.file.server;

import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

//服务端:接受文件
public class CUploadFileServer {

	public static void main(String[] args) throws Exception{
		//监听8686端口
		ServerSocket ss = new ServerSocket(8686);
		System.out.println("服务器已启动,正在监听8686端口...");
		//进入消息等待接受中...
		Socket s = ss.accept();
		//显示客户端ip地址
		String ip = s.getInetAddress().getHostAddress();
		System.out.println(ip+"已连接");
		//这里是getInputStream流
		BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
		//这里是FileWriter
		PrintWriter out = new PrintWriter(new FileWriter("Rece.txt"),true);
		String line = null;
		//狂读数据,往文件里写一行
		while ((line = bufIn.readLine()) != null)
		{
			out.println(line);
		}
		//获得输出流,给客户端发送一条消息
		PrintWriter pw = new PrintWriter(s.getOutputStream(),true);
		pw.println("上传成功");
		//关闭资源
		bufIn.close();
		out.close();
		pw.close();
		s.close();ss.close();
	}
}

这里需要注意几点:

1)BufferedReader 是将数据读取到缓冲流,如果不用println(),则需要刷新缓冲流flush()。

2)readLine()读取是以换行结束,这时候如果不对结束加以处理,则很容易造成服务器客户端都进入阻塞状态。

运行效果显示:

1)启动服务端

2)启动客户端,上传文件

3)服务端和客户端链接成功

另外,需要上传文件和接收到的文件位置显示如下:

1)上传前

2)上传成功

参考文献: Java视频 毕向东 主讲

原文地址:http://blog.csdn.net/qingdujun/article/details/39324737

时间: 2024-10-17 05:01:48

Java TCP使用Socket进行网络文件传送(5)的相关文章

Java TCP使用Socket进行网络图片传送(6)

作者 : 卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/39338831 本文演示,使用Socket进行网络图片传送,实现客户端的client.bmp文件上传到服务端. 1)客户端,上传client.bmp图片给服务端,并接受服务端返回的"上传成功"消息. 2)服务端,接受客户端的图片并保存为server.bmp,同时给客户端发送"上传成功"消息. 客户端,代码如下: package upload.p

Java TCP/UDP socket 编程流程总结

最近正好学习了一点用java socket编程的东西.感觉整体的流程虽然不是很繁琐,但是也值得好好总结一下. Socket Socket可以说是一种针对网络的抽象,应用通过它可以来针对网络读写数据.就像通过一个文件的file handler就可以都写数据到存储设备上一样.根据TCP协议和UDP协议的不同,在网络编程方面就有面向两个协议的不同socket,一个是面向字节流的一个是面向报文的. 对socket的本身组成倒是比较好理解.既然是应用通过socket通信,肯定就有一个服务器端和一个客户端.

Java TCP使用Socket进行网络通信(3)

作者 : 卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/39322051 本文演示,TCP使用Socket进行网络通信,建立简单的客户端,并使用客户端给服务器发送一条消息,服务端接收到后,将数据打印在控制台上. 1)客户端,发送一个消息给服务端. 2)服务端,接收到客户端的消息,并打印在控制台上. 客户端,代码如下: package tcp.clinet.qdj; import java.io.OutputStream; impo

【Java TCP/IP Socket】TCP Socket通信中由read返回值造成的的死锁问题(含代码)

书上示例 在第一章<基本套接字>中,作者给出了一个TCP Socket通信的例子——反馈服务器,即服务器端直接把从客户端接收到的数据原原本本地反馈回去. 书上客户端代码如下: import java.net.Socket; import java.net.SocketException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class TCPEch

Java TCP使用Socket进行网络通信(4)之往返发送

作者 : 卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/39322613 本文演示,TCP使用Socket进行网络通信,实现客户端与服务器端数据的往返发送. 1)客户端,给服务器发送消息,并将接受到的服务器消息打印在客户端控制台上. 2)服务端,接受客户端消息,并打印在服务器开端控制台上,同时给客户端回复收到消息. 客户端,代码如下: package tcp.client2.qdj; import java.io.InputStr

Java UDP使用Socket进行网络聊天(1)

作者 : 卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/39312065 本文演示,使用Socket进行网络聊天,实现客户端给服务器端一直发送消息,当发送“886”的时候,表示客户端关闭. 1)客户端,给服务器发送数据,发送“886”表示关闭客户端. 2)服务器,一直监听9527端口,将监听到的数据打印在控制台上. 一.客户端:主要使用了从键盘录入,和当发送“886”数据包的时候,关闭客户端. [java] view plainc

Java UDP使用Socket进行网络聊天(2)之群聊版

作者 : 卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/39312241 本文演示,使用Socket进行网络聊天之群聊,实现客户端给"局域网"网段里面的所以机器发送广播,当发送“886”的时候,表示客户端关闭. 1)客户端,给服务器发送数据,发送“886”表示关闭客户端. 2)服务器,一直监听9527端口,将监听到的数据打印在控制台上. 3)客户端+服务器版本,实现既可以发送数据,又可以接受数据的多线程聊天程序. 需要注

一个项目看java TCP/IP Socket编程

前一段时间刚做了个java程序和网络上多台机器的c程序通讯的项目,遵循的是TCP/IP协议,用到了java的Socket编程.网络通讯是java的强项,用TCP/IP协议可以方便的和网络上的其他程序互通消息. 先来介绍下网络协议:     TCP/IP         Transmission Control Protocol 传输控制协议         Internet Protocol 互联网协议     UDP         User Datagram Protocol 用户数据协议

【Java TCP/IP Socket】UDP Socket(含代码)

转载请注明出处:http://blog.csdn.net/ns_code/article/details/14128987 UDP的Java支持 UDP协议提供的服务不同于TCP协议的端到端服务,它是面向非连接的,属不可靠协议,UDP套接字在使用前不需要进行连接.实际上,UDP协议只实现了两个功能: 1)在IP协议的基础上添加了端口: 2)对传输过程中可能产生的数据错误进行了检测,并抛弃已经损坏的数据. Java通过DatagramPacket类和DatagramSocket类来使用UDP套接字