|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
这是客户端的代码
public class Client{
public static void main(String args[])throws IOException {
//创建Socket对象,并连接服务器
Socket socket = new Socket("127.0.0.1",10000);
//读取本地文件的数据,并写到服务器中
BufferedReader brd = new BufferedReader(new InputStreamReader(new FileInputStream("d://新建文件夹//xinyue.txt"), "UTF-8"));
String s1 = brd.readLine();
System.out.println(s1);
BufferedWriter x = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
x.write(s1);
//往服务器写出结束标记
socket.shutdownOutput();
socket.close();
}
}
服务端的代码
public class Serverx{
public static void main(String args[]) throws IOException{
//创建对象并绑定端口
ServerSocket ss = new ServerSocket(10000);
//等待客户端连接
Socket socket = ss.accept();
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedWriter bh = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d://新建文件夹//xiao.txt"), "UTF-8"));
String s;
while ((s = br.readLine()) != null) {
System.out.println(s);
bh.write(s);
bh.newLine();
bh.flush();
}
socket.close();
ss.close();
}
}
为什么新建的文件“xiao”为空
问题在于,客户端和服务端之间的数据传输没有使用换行符,而在服务端读取数据时使用了readLine()方法,它会读取到换行符为止。我们需要修改客户端和服务端代码来解决这个问题。
首先在客户端代码中,在x.write(s1);后面添加一个换行符。将其更改为:
x.write(s1);
x.newLine();
x.flush();
然后在服务端代码中,在写入到文件时,我们需要删除bh.newLine();。现在你的服务端代码应该是这样的:
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class Serverx{
public static void main(String args[]) throws IOException{
//创建对象并绑定端口
ServerSocket ss = new ServerSocket(10000);
//等待客户端连接
Socket socket = ss.accept();
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedWriter bh = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d://新建文件夹//xiao.txt"), "UTF-8"));
String s;
while ((s = br.readLine()) != null) {
System.out.println(s);
bh.write(s);
bh.flush();
}
socket.close();
ss.close();
}
}
现在运行代码,你应该能看到新建的文件“xiao.txt”包含客户端发送的数据。
|
|