我使用一个具有双向通信的套接字设置了一个客户端-服务器模型。
应该是这样的:1。客户端-发送单词数组2。服务器-读取单词数组3。服务器-发送布尔值4。客户端-读取布尔值5。客户端-发送图像6。服务器读取图像
这个过程在一个循环中,与第一次迭代完美配合,但在第二次迭代中,我得到了以下错误:
JAVA网SocketException:软件导致的连接中止:套接字写入错误
我认为发生的是,当服务器返回到读取单词数组(#2)之前发送的布尔值(#3)或客户端之前发送的图像(#5)时。如果是这样的话,有人知道这个问题的解决方案吗?我在想也许使用两个套接字可以解决这个问题,但我又不知道如何使用两个套接字来实现它!我算是个新手!
我在下面的程序中标记了执行顺序。
客户
private void whileConnected() throws IOException{
do{
analyser.start();
boolean takeScreenShot = false;
if(analyser.isCaptured)
{
**output.writeObject(analyser.getCapturedText()); // 1**
output.flush();
**takeScreenShot = input.readBoolean(); //4**
if(takeScreenShot == true);
{
ScreenShot ss = new ScreenShot();
BufferedImage screenShot = ss.getScreenShot();
if(screenShot != null)
{
**ImageIO.write(screenShot, "png",output); // 5**
output.flush();
}
}
}
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}while(true);
}
服务器
private void whileConnected() throws IOException {
do {
try {
analyserDetail = new AnalyserDetail();
**analyserDetail.text = (String[]) input.readObject(); // 2**
if(analyserDetail.text != null)
{
analyserDetail.username = "Michael";
analyserDetail.positionFound = new ArrayList<Integer>();
analyserDetail.wordsFound = new ArrayList<String>();
analyserDetail.wordCount = 0;
findProfanity();
if(analyserDetail.wordCount > 0)
{
new CreateReport(analyserDetail);
//output.writeObject(new Boolean(true));
**output.writeBoolean(true); // 3**
output.flush();
output.reset();
**BufferedImage screenShot = ImageIO.read(input); //6**
if(screenShot != null)
{
java.util.Date today = Calendar.getInstance().getTime();
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
String reportName = formatter.format(today);
new StoreScreenShot(screenShot,reportName);
}
}else
{
output.writeObject("False");
output.flush();
}
}
analyserDetail = null;
} catch (ClassNotFoundException c) {
System.out.println("\nI dont know wtf was sent!");
}
} while (true);
}
}
output.writeObject("False");
几乎可以肯定
output.writeBoolean(false);
我有两个通过字符串与套接字通信的Java项目。一个是客户端,另一个是服务器。服务器通过“ServerSocket”接受连接,并使用新创建的“套接字”创建新的“会话”(线程)。 同时,客户端只有一个“套接字”,一旦连接了这个套接字,客户端就会创建一个“ClientSession”(线程,非常类似于“session”)。 我想要的是服务器通过“username”字符串询问客户机他的用户名,客户机用他的
我已经看到了很多与我试图做的事情有关的问题,但我还没有找到任何解决方案。 我尝试编写两个套接字程序(一个客户端和一个服务器),以便服务器能够向客户端发送任何类型的文件(按字节)。我不确定如何构建/协调以下内容: > (在服务器中)读取语句从文件中获取数据(我使用fread()) (在服务器中)将数据发送到客户端的write语句(我使用的是write()) (在客户端)读取语句从服务器接收数据(我使
我试图用java实现一个客户端服务器,在这里我读取客户端中的输入并在服务器中执行UperCase,然后返回客户端并打印UperCase。我使用ObjectOutputStream和ObjectInputStream进行读写,但是当我在客户机中键入一个msg时,程序会显示以下错误: Digite uma msg casa java.io.eofexception位于java.io.datainput
我有java服务器和只有一个客户端的时间。 客户端连接并发送卡ID(在服务器端阻止读取是合适的,因为当时只有一个客户端)
在我的客户端/服务器应用程序中,我的客户端wiil与服务器通信有两个功能:客户端要么向服务器请求数据,要么发送数据,以便服务器保存。我对这两种方法都使用一个套接字,要使用的方法由发送的第一个字节定义。如果第一个字节是“1”,它将请求数据。如果是“2”,它将发送数据(数据字节在“2”字节之后发送)。它非常适合发送数据。但是当我请求数据时,只要我不读取客户端中的套接字流,它就可以工作。这就像如果我在发
我正在尝试创建一个非常基本的JavaFTP服务器。 处理传入套接字、接受它并将其转换为客户机线程的代码似乎工作得很好,但由于某些原因,当我尝试发送欢迎消息时,数据似乎没有到达客户机。 我在控制台中看到它正在运行并试图发送欢迎消息,但是FileZilla(我用来连接的FTP客户端)通常位于: === 编辑 欢迎信息非常基本:发送(“220欢迎使用FTP服务器”); 我试图只包含相关的代码,因为在这里