当前位置: 首页 > 知识库问答 >
问题:

客户端-服务器套接字

戴靖
2023-03-14

我试图用java实现一个客户端服务器,在这里我读取客户端中的输入并在服务器中执行UperCase,然后返回客户端并打印UperCase。我使用ObjectOutputStream和ObjectInputStream进行读写,但是当我在客户机中键入一个msg时,程序会显示以下错误:

Digite uma msg casa java.io.eofexception位于java.io.datainputstream.readunsignedshort(未知源)位于java.io.objectinputstream$blockdatainputstream.readunsignedshort(未知源)位于java.io.objectinputstream$blockdatainputstream.readutf(未知源)位于java.io.objectinputstream$blockdatainputstream.readutf(未知源)位于

我的客户端是这样的:

package Client.java;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

public class Client {

    public static void main(String[] args) {

        //estabelece conexao 
        // trocar msg com o server

        try {
            //cria conexao entre  client e servidor
            Socket socket = new Socket("localhost",5558);

            //cria input and output
            ObjectOutputStream output = new ObjectOutputStream(socket.getOutputStream());
            ObjectInputStream input = new ObjectInputStream(socket.getInputStream());

            Scanner scan = new Scanner(System.in);
            System.out.println("Digite uma msg");
            String word = scan.nextLine();
            output.writeUTF(word);
            output.flush();
            word = input.readUTF();
            System.out.println("Upercase"+ word);

            input.close();
            output.close();
            socket.close();

        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

这是我的服务器端:

package Server;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.ServerSocket;

public class Servidor {

    private ServerSocket servidor;

    private void criarServerSocket(int porta) throws IOException {
        servidor = new ServerSocket(porta);
    }

    private Socket esperaConexao() throws IOException
    {
        Socket socket = servidor.accept();
        return socket;
    }

    private void fechaSocket(Socket s) throws IOException {
        s.close();
    }

    private void trataConexao(Socket socket) throws IOException {
        //*recebe e envia msg */

        try {
            ObjectOutputStream output = new ObjectOutputStream(socket.getOutputStream());
            ObjectInputStream input = new ObjectInputStream(socket.getInputStream());

            String msg = input.readUTF();
            output.writeObject(msg.toUpperCase());
            output.flush();

            input.close();
            output.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
        }

        fechaSocket(socket);
    }

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub

        Servidor server = new Servidor();
        System.out.println("Wait for a connection");
        server.criarServerSocket(5558);
        System.out.println("Conectado ");
        Socket socket = server.esperaConexao();
        server.trataConexao(socket);
    }
}

我的服务器要关闭流了吗?我怎么能修复它,还在关闭溪流?谢谢你的帮助。

共有1个答案

周麒
2023-03-14

您应该在Servidor中使用

output.writeUTF(msg.toUpperCase());

而不是

output.writeObject(msg.toUpperCase());
 类似资料:
  • 我对套接字有点陌生,我正在尝试编写一个程序,在这个程序中,我基本上可以从客户端程序向服务器程序发送一些简单的请求。现在我只想在客户端有1或2个选项供用户选择。例如,如果用户在客户端选择“选项1”,那么服务器会返回一条消息“您选择选项1”,以此类推,但我不知道如何读取服务器上从客户端发送的输入。 客户代码: 服务器代码: 我需要在Clinet中使用两个不同的BufferedReader吗?一个用于用

  • 正在编写一个服务器,使用Java套接字的客户端聊天程序。这是我的服务器套接字类的代码。 客户端能够建立连接并向服务器发送消息。服务器也可以接收客户端发送的消息。问题是当消息从服务器发送时,客户端没有收到消息。这是我的客户端套接字代码。

  • 真的需要你帮忙。 我的项目是通过电缆连接两台PC机,并使用tcp套接字将客户端文本框形式的字符串发送到服务器。问题是ATI只能发送一个字符串,然后连接就会关闭。 注意:某个端口上的连接将在表单加载中建立并成功。

  • 我们收到了这段代码,应该对其进行修改,以便无论何时客户端连接到服务器并发送消息,服务器都应该回复我听到了,伙计。这适用于一个或多个客户机,但下一个任务是,当新客户机连接时,服务器应该告诉所有其他已连接的客户机。 我以为这会很容易,但结果并不像我想象的那样。由于服务器总是得到sock 3,第一个客户端得到4,第二个客户端得到5等等,所以我尝试创建一个for循环,每当一个新客户端连接时,该循环就会向4

  • 问题内容: 我试图用没有gui的服务器连接带有gui的客户端。连接已完成,但我看不到这两个应用程序之间的任何消息。(我应该在客户端中找到SERVER HERE,在服务器中找到CLIENT HERE) 客户端连接代码: (输入和输出在此客户端类扩展到的GUI类中定义。定义为“受保护的BufferedReader输入;受保护的PrintWriter输出;”) 另外,服务器代码: 连接似乎还可以,所以我

  • 我组装了一个Java套接字服务器和客户端,可以互相发送消息,我想使用JavaScript作为客户端,但是。。。下面是在托管Java服务器并加载JavaScript客户端时发生的情况。 JavaScript: 这将在chrome控制台中打印: 到“ws://127.0.0.1:9005/”的WebSocket连接失败:WebSocket握手期间出错:无效状态行 WebSocket错误[对象事件] 我