socket发送,接收问题

archmagetony archmagetony 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
新人第一次学这个,按照别人的代码改了一下
思路大概是客户端先向服务器发送一个abc,然后服务器收到后返回当前目录的所有文件的名字,然后我在客户端再输入一个文件的名字,服务器端能够读取出来里面的内容然后再给我发回来。

我现在遇到的问题是第一次调用
outToServer.writeBytes("abd.txt" + '\n');
modifiedSentence = inFromServer.readLine();
这个两句的时候可以实现一次发送和多次的接收(使用的while死循环,然后服务器那里如果都发完了会有一个end标记,客户端接收到以后会中断这个死循环)
但是第二次调用
outToServer.writeBytes("abd.txt" + '\n');
modifiedSentence = inFromServer.readLine();
这个的时候就不行了。我现在也不知道我到底是没法出去,还是没收到,还是什么问题。
想求各位帮忙解答下,是说这个只能够使用一次么?(服务器端通过while死循环不断接受,然后判断之后发送)


客户端
   String sentence;
String modifiedSentence;
BufferedReader inFromUser =
new BufferedReader(new InputStreamReader(System.in));
Socket clientSocket = new Socket("127.0.0.1",6789);//hostname is server domainame
DataOutputStream outToServer =
new DataOutputStream(clientSocket.getOutputStream());
BufferedReader inFromServer =
new BufferedReader(new InputStreamReader(
clientSocket.getInputStream()));
sentence = "abc";
outToServer.writeBytes(sentence + '\n');
while (true){
modifiedSentence = inFromServer.readLine();
if(modifiedSentence.equals("end")){
break;
}
System.out.println("目录为:"+modifiedSentence);
}
System.out.println("Please Enter File Name:");
// sentence = inFromUser.readLine();
// outToServer.writeBytes(sentence + '\n');
outToServer.writeBytes("abc.txt" + '\n');
modifiedSentence = inFromServer.readLine();
System.out.println("FROM SERVER:"+modifiedSentence);
clientSocket.close();


接收端:
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

/**
* Created by Administrator on 2016/4/13.
*/
public class TCPFileServer {
public static void main(String argv[]) throws Exception
{
String ClientSentence;
String capitalizedSentence;
ServerSocket welcomeSocket = new ServerSocket(6789);
while(true){
File directory = new File("");//参数为空
String total = directory.getCanonicalPath() ;
Socket connectionSocket = welcomeSocket.accept();
BufferedReader infromClient =
new BufferedReader(new
InputStreamReader(connectionSocket.getInputStream()));
DataOutputStream outToClient =
new DataOutputStream(connectionSocket.getOutputStream());
ClientSentence = infromClient.readLine();
if(ClientSentence.equals("abc")){
// outToClient.writeBytes(total+'\n');
File file=new File(total);//获取某个目录下的所有文件名
String test[];
test=file.list();
for(int i=0;i<test.length;i++)
{
outToClient.writeBytes(test[i]+'\n');
// System.out.println(test[i]);
}
outToClient.writeBytes("end"+'\n');
}
else
{
try{
RandomAccessFile in=new RandomAccessFile(ClientSentence,"r");
String s;
total="";
while((s=in.readLine())!=null){
total=total+s;
}
outToClient.writeBytes(total+'\n');
in.close();
}
catch(Exception e){
outToClient.writeBytes(ClientSentence+" not found \n");
}
}

}
}

}

...全文

相关推荐

评论 6
收藏 已收藏
分享
返回顶部
archmagetony
Java 51,407 成员 86,128 内容