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

为什么这个套接字数据只发送一次到Java服务器?

刁瀚昂
2023-03-14

我只是想要一个程序网络游戏,它需要客户端之间的通信启动…服务器是的…客户端给我卡片…(服务器不响应此代码,如果我必须始终创建新的套接字,我将如何获得相同的地址…localhost只是为了测试目的)套接字只运行一次,我不明白为什么????????

我在服务器上监听,虽然为真,但它只得到一个字符串,在下一次尝试中没有得到任何东西....

服务器只是在听和读

package client;     

import java.net.*;            
import java.io.*;                   

public class Client {                        

    Client() {                         
        try {
        Socket socket = new Socket("localhost",2222);
        int i=0;
        while(i<100){
            i++;
            OutputStream os = socket.getOutputStream();
            PrintWriter pw = new PrintWriter(os,true);
            pw.println(i);
        }                          
        } catch(IOException e){
            System.out.println("Client Constructor Exception");
        }
    }

    public static void main(String[] args) throws Exception{
        Client client = new Client();
    }
}

服务器的代码是.....请帮助我

package server;

import java.io.*;
import java.net.*;

public class Server {

    Server() {
        try{
            serverSocket = new ServerSocket(2222);
        } catch(IOException e) {
            System.out.println("IOException in Server Constructor");
        }
    }

    public void operate() {
        try{
 //           Control control = new Control();
            while (true) {
                socket = serverSocket.accept();
                InputStream is = socket.getInputStream();
                InputStreamReader isr = new InputStreamReader(is);
                BufferedReader br = new BufferedReader(isr);
               System.out.println(br.readLine());
                //control.recieve(socket, br.readLine());
            }
        } catch(IOException e) {
            System.out.println("IOException in Server operate function");
        }
    }

    public Socket getSocket() {
        return socket;
    }

    public static void main(String[] args) throws IOException {
        Server server = new Server();
        server.operate();
    }

    private ServerSocket serverSocket;
    private Socket socket;
}

输出是:

运行:开始

为什么它不能运行100次。。。。。

共有3个答案

程卓君
2023-03-14
Socket socket = new Socket("localhost",2222);  
OutputStream os=null;   
PrintWriter pw=null;     

while(true){                                   
    os = socket.getOutputStream();                   
    pw = new PrintWriter(os,true);                     
    pw.println("Start");                       
}          
璩珂
2023-03-14

在服务器代码中,您必须将server.accept()移出循环。试试这个。会有用的。除此之外,我还尝试了服务器的即时回复。

服务器代码。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    private ServerSocket serverSocket;
    private Socket socket;

    Server() {
        try {
            serverSocket = new ServerSocket(2222);
        } catch (IOException e) {
            System.out.println("IOException in Server Constructor");
        }
    }

    public void operate() {
        try {
            // Control control = new Control();
            socket = serverSocket.accept();
            while (true) {
                System.out.println("Server starts listening on "
                        + serverSocket.getLocalPort());

                System.out.println("Server accepts connection.");

                OutputStream os = socket.getOutputStream();
                PrintWriter pw = new PrintWriter(os, true);
                pw.println("Hi Client");

//              Thread.sleep(1000);
                InputStream is = socket.getInputStream();
                InputStreamReader isr = new InputStreamReader(is);
                BufferedReader br = new BufferedReader(isr);
                System.out.println(br.readLine());
                System.out.println("reply sent to client");
                // control.recieve(socket, br.readLine());
            }
        } catch (IOException /*| InterruptedException*/ e) {
            System.out.println("IOException in Server operate function");
        }
    }

    public Socket getSocket() {
        return socket;
    }

    public static void main(String[] args) throws IOException {
        Server server = new Server();
        server.operate();
    }

}

客户代码:

package com.java.examples;

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;

public class Client {
    Client() {
        try {
            Socket socket;
             socket = new Socket("localhost",2222);

            // InputStream in = socket.getInputStream();
            while (true) {
//              socket = new Socket("localhost", 2222);
                System.out.println("Socket - " + socket.getLocalPort());
                OutputStream os = socket.getOutputStream();
                InputStream is = socket.getInputStream();
                PrintWriter pw = new PrintWriter(os, true);
                pw.println("Hi Server");
//              Thread.sleep(2000);
                InputStreamReader isr = new InputStreamReader(is);
                BufferedReader br = new BufferedReader(isr);
                System.out.println("Waiting for server reply..");
                System.out.println(br.readLine());
                System.out.println("Got reply from server..");
                // pw.flush();
            }
        } catch (IOException/* | /*InterruptedException*/ e) {
            e.printStackTrace();
            System.out.println("Client Constructor Exception");
        }
    }

    public static void main(String[] args) throws Exception {
        Client client = new Client();
    }

}
姬温文
2023-03-14

每次在循环中创建一个新套接字,您都想获得

socket = new Socket("localhost",2222); 

在无限循环之外

 类似资料:
  • 我正在尝试创建一个仅在共享内存中具有文件的小文件服务器。客户端应该向服务器发送命令,如 CREATE、DELETE 等。但是,我还没有到那个阶段。 我已经准备了一个服务器和一个客户端。服务器接受套接字,并为每个客户端连接创建一个新线程(要求)。 当我启动客户端时,我可以成功连接到服务器并发送将被接收的消息。但是,这只能工作一次。发送我的命令后,服务器将不会收到任何其他命令。 我尝试使用换行符捕获消

  • 我有一个关于Java插座的技术问题。 例如,假设我有一个Java Sockets服务器和n个多个客户端。是否可以几乎实时地将数据从服务器发送到任何或所有客户端? 更准确地说: 有哪种监听器可以在Sockets客户端中实现 有人能告诉我什么方法是最好的吗?此外,如果有人有一个代码示例,我也会很高兴。 谢谢

  • 我用Java编写了套接字客户端程序。我正在使用DataOutputStream向服务器套接字发送消息。有时DataOutputstream上的writed消息不会发送到ServerSocket。我想是因为我发了信息后没有脸红。我这样做,但没有用。如果我终止类执行,那么只有我从ServerSocket接收消息。 我的代码: 已完成将消息放入队列。无限while循环将负责向服务器套接字发送日志。 文件

  • 我也试图从Java服务器和Python客户机传输数据。我成功地将数据从客户端传输到服务器,但根本没有接收到数据。 在python客户机上,我有以下内容:(注意,这是在一个单独的线程中运行的) 如果这是成功的工作,输出将是客户端套接字值,等待服务器,然后得到一些数据。然而,它正陷入等待数据的困境。 这意味着套接字显然不是None,它正在等待缓冲区接收?我将接收缓冲区大小设置为1,以查看是否有任何数据

  • 我有一个客户端和一个服务器。它们通过使用以下命令创建的套接字进行通信: 套接字(AF_INET,SOCK_STREAM,0) 他们之间的交流很好。 我想创建第三个程序,充当服务器并向客户端发送假消息。此程序必须使用以前创建的客户端和服务器套接字。 我使用发送命令与套接字ID由我的静态设置 写入(插座号,消息,1024) 但是它不起作用(我不确定这是正确的方法)。 因此,我尝试了telnet和nc(

  • 我发现这样的php代码: 我希望这个循环会执行4次,因为$I变成了对$的引用(对吗?)。然而,循环只执行一次,并输出: a=10,i=10 我不明白为什么它会这样工作。有什么想法吗?