Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 向服务器发送数据时返回Null_Java - Fatal编程技术网

Java 向服务器发送数据时返回Null

Java 向服务器发送数据时返回Null,java,Java,下面的客户端 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; imp

下面的客户端

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

public class TCPclient {
    
    
    
    public static void openChat() throws UnknownHostException, IOException {
        Scanner keyboard = new Scanner(System.in);
        boolean exit = false;
        while (!exit) {
            String input = keyboard.nextLine();
            if(input != null) {
                if ("quit".equals(input)) {
                    System.out.println("Exit programm");
                    exit = true;
                } else if ("/".equals(input)) {
                    //Do something
                    getInput();
                }
            }
        }
    }
    
    public static void getInput() throws UnknownHostException, IOException {
        
        
        Scanner scan = new Scanner(System.in);
        
        String message = scan.nextLine();
        
        sendMessage(message);
        
        openChat();
        
    }
    
    public static void sendMessage(String message) throws UnknownHostException, IOException {
        Socket sock = new Socket("localhost", 9999);
        
        InputStream input = sock.getInputStream();
        OutputStream output = sock.getOutputStream();
        
        
        BufferedReader reader = new BufferedReader(new InputStreamReader(input));
        PrintWriter writer = new PrintWriter(output, true);
        System.out.println(message);
        writer.write(message);
        
        
        sock.close();
    }
    
    public static void main(String[] args) throws UnknownHostException, IOException {
        System.out.println("Type / to chat or quit to exit");
        
        openChat();
        
    }
    
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
class ServiceThread extends Thread {
    Socket sock;
    
    public ServiceThread(Socket sock) {
        this.sock = sock;
    }
    public void run() {
        
        
        try {
            InputStream input = sock.getInputStream();
            OutputStream output = sock.getOutputStream();
            
            byte request[] = new byte[100];
            input.read(request);
            BufferedReader reader = new BufferedReader(new InputStreamReader(input));
            PrintWriter writer = new PrintWriter(output, true);
            String message = reader.readLine();
            
            System.out.println(message);
            
            sock.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
public class TCPserver {
    static ArrayList<ServiceThread> theClients = new ArrayList<ServiceThread>();
    public TCPserver() {
        
    }
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        ServerSocket serSock = new ServerSocket(9999);
        
        while(true) {
            Socket sock = serSock.accept();
            ServiceThread server = new ServiceThread(sock);
            theClients.add(server);
            server.start();
        }
    }

}
下面的服务器端

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

public class TCPclient {
    
    
    
    public static void openChat() throws UnknownHostException, IOException {
        Scanner keyboard = new Scanner(System.in);
        boolean exit = false;
        while (!exit) {
            String input = keyboard.nextLine();
            if(input != null) {
                if ("quit".equals(input)) {
                    System.out.println("Exit programm");
                    exit = true;
                } else if ("/".equals(input)) {
                    //Do something
                    getInput();
                }
            }
        }
    }
    
    public static void getInput() throws UnknownHostException, IOException {
        
        
        Scanner scan = new Scanner(System.in);
        
        String message = scan.nextLine();
        
        sendMessage(message);
        
        openChat();
        
    }
    
    public static void sendMessage(String message) throws UnknownHostException, IOException {
        Socket sock = new Socket("localhost", 9999);
        
        InputStream input = sock.getInputStream();
        OutputStream output = sock.getOutputStream();
        
        
        BufferedReader reader = new BufferedReader(new InputStreamReader(input));
        PrintWriter writer = new PrintWriter(output, true);
        System.out.println(message);
        writer.write(message);
        
        
        sock.close();
    }
    
    public static void main(String[] args) throws UnknownHostException, IOException {
        System.out.println("Type / to chat or quit to exit");
        
        openChat();
        
    }
    
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
class ServiceThread extends Thread {
    Socket sock;
    
    public ServiceThread(Socket sock) {
        this.sock = sock;
    }
    public void run() {
        
        
        try {
            InputStream input = sock.getInputStream();
            OutputStream output = sock.getOutputStream();
            
            byte request[] = new byte[100];
            input.read(request);
            BufferedReader reader = new BufferedReader(new InputStreamReader(input));
            PrintWriter writer = new PrintWriter(output, true);
            String message = reader.readLine();
            
            System.out.println(message);
            
            sock.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
public class TCPserver {
    static ArrayList<ServiceThread> theClients = new ArrayList<ServiceThread>();
    public TCPserver() {
        
    }
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        ServerSocket serSock = new ServerSocket(9999);
        
        while(true) {
            Socket sock = serSock.accept();
            ServiceThread server = new ServiceThread(sock);
            theClients.add(server);
            server.start();
        }
    }

}
导入java.io.BufferedReader;
导入java.io.IOException;
导入java.io.InputStream;
导入java.io.InputStreamReader;
导入java.io.OutputStream;
导入java.io.PrintWriter;
导入java.net.ServerSocket;
导入java.net.Socket;
导入java.nio.charset.StandardCharset;
导入java.util.ArrayList;
类ServiceThread扩展线程{
插座;
公共服务线程(套接字套接字){
this.sock=sock;
}
公开募捐{
试一试{
InputStream输入=sock.getInputStream();
OutputStream output=sock.getOutputStream();
字节请求[]=新字节[100];
输入。读取(请求);
BufferedReader reader=新的BufferedReader(新的InputStreamReader(输入));
PrintWriter=新的PrintWriter(输出,真);
字符串消息=reader.readLine();
System.out.println(消息);
sock.close();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
}
公共类TCPserver{
静态ArrayList客户端=新建ArrayList();
公共TCPserver(){
}
公共静态void main(字符串[]args)引发IOException{
//TODO自动生成的方法存根
ServerSocket serSock=新的ServerSocket(9999);
while(true){
Socket sock=serSock.accept();
ServiceThread服务器=新的ServiceThread(sock);
添加(服务器);
server.start();
}
}
}
当我想要返回客户端的消息时,返回null。 我是新来的,所以告诉我,如果我只是做错了。
另外,我想知道你们是如何了解这些信息的,因为我想了解更多信息,不知道从哪里了解这些信息。

在您的实现中存在服务器问题

  • ServiceThread
    内部,
    run
    方法关闭
    sock(socket)
    这就是为什么连接在启动后关闭
  • 重新写入
    运行

    public void run() {
            
            try {
                DataInputStream inputStream = new DataInputStream(sock.getInputStream());
                //DataOutputStream output = new DataOutputStream(sock.getOutputStream());
                String  str=(String)inputStream.readUTF();  
                System.out.println("Client Echo:" + str);
    
                //sock.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
  • 还需要修改客户端实现:
    • 您可以在
      sendMessage
      方法中初始化套接字连接。因此,您无法与服务器通信。因此,在构造函数中初始化
      socket
    修改的
    TCPclient

    public class TCPclient {
        
        DataOutputStream dataOutputStream = null;
        
        public TCPclient() throws UnknownHostException, IOException {
            Socket sock = new Socket("localhost", 9999);
            dataOutputStream = new DataOutputStream(sock.getOutputStream());
        }
    
        public  void sendMessage(String message) throws UnknownHostException, IOException {
            System.out.println(message);
            dataOutputStream.writeUTF(message);
        }
        
        public static void main(String[] args) throws UnknownHostException, IOException {
            
            TCPclient tcPclient = new TCPclient();
            System.out.println("Type / to chat or quit to exit");
            tcPclient.sendMessage("Hello From Client");
            tcPclient.openChat();
            
        }
    }
    

    它对我有用。试试看。我使用
    DataInputpStream
    DataOutputStrem
    而不是
    InputStream
    OutputStream
    ,这些都不是主要问题。

    是哪一行?我从网络(而不是YouTube)上学习,从阅读和做许多书籍中的练习,以及多年的编程中学习。你认为
    input.read(request)
    在做什么?看起来,在服务器上,你从流中读取,然后创建了一个BufferedReader,然后从中读取。那么也许就没有什么可看的了?你的网络沟通观念很差。如果不重写整个包,很难修改。概念是错误的,您的修改会使概念变成僵尸。客户端打开了一个套接字,并使其“未关闭”。ServiceThread也是如此。这很糟糕。非常糟糕。不是这样的,我只是想把重点放在实际问题上。根据任何情况关闭插座。如果str.equals(“/”)返回true,则调用socket.close()。。。