您的位置:首页 > 理论基础 > 计算机网络

用java网络编程中的TCP方式上传文本文件及出现的小问题

2017-11-13 12:54 381 查看
自己今天刚学java网络编程中的TCP传输,要用TCP传输文件时,自己也是遇到了一些问题,抽空把它整理了一下,供自己以后参考使用。
  首先在这个程序中,我用一个客户端,一个服务端,从客户端上传一个文本文件给服务端,服务端接收数据并显示“上传成功”给客户端。

客户端:

1 import java.io.BufferedReader;
2 import java.io.FileReader;
3 import java.io.IOException;
4 import java.io.InputStreamReader;
5 import java.io.PrintWriter;
6 import java.net.Socket;
7
8 public class UploadClient {
9
10     /**
11      * @param args
12      * @throws IOException
13      */
14     public static void main(String[] args) throws IOException {
15         //1.创建客户端的Socket对象
16         Socket s=new Socket("192.168.1.127",10000);
17
18         //2.将文件放入缓冲区,并上传
19         BufferedReader bufr=
20                 new BufferedReader(new FileReader("client.txt"));
21
22         //通过使用PrintWriter对字节流和字符流进行处理,接管流
23         PrintWriter out =new PrintWriter(s.getOutputStream(),true);
24
25         //开始读取,上传给服务端
26         String line=null;
27         while((line=bufr.readLine())!=null){
28             out.println(line);
29         }
30
31         //在这里必须给一个用于结束的标志,要不然服务端会一直等待·····
32         out.println("over");
33
34         //3.读取服务端返回的对象
35         BufferedReader bufrIn =new BufferedReader(new InputStreamReader(s.getInputStream()));
36         String str=bufrIn.readLine();
37         System.out.println(str);
38
39         //4.关流
40         bufr.close();
41         s.close();
42     }
43
44 }


服务端:

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

public class UploadServer {

/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
//1.建立服务端的socket对象
ServerSocket ss=new ServerSocket(10000);
//2.接收服务端的数据
Socket s=ss.accept();

//将接受的数据放入流中
BufferedReader bufIn=
new BufferedReader(new InputStreamReader(s.getInputStream()));

//指定要写入得文件
BufferedWriter bufw=new BufferedWriter(new FileWriter("server.txt"));

//开始读取
//缓冲区的默认大小为8k,一到8k则会自动刷新,若没有结束标志,则得到的文件大小一定是8的倍数
String line=null;
while((line=bufIn.readLine())!=null){
if("over".equals(line))
break;
bufw.write(line);
bufw.newLine();
//自己写刷新
bufw.flush();
}

//向客户端返回数据,用PrintWriter
PrintWriter out =new PrintWriter(s.getOutputStream(),true);

out.println("上传成功");

//关流
bufw.close();
//与客户端断开连接关服务端
s.close();
ss.close();
}

}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐