因此,正如简短标题所述,我有一个UDP服务器和客户端。 服务器目前有3种方法,一种是打开套接字并接收数据包。 下一个读取数据包并打印信息。 最终用户根据用户输入创建响应包。

我将在此处包含服务器代码,因为我认为如果我可以在使服务器能够发送和接收消息方面获得帮助,那么我也可以将新知识转换为客户端!

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

public class ServerChat {

DatagramSocket Server = null;
byte[] buf = new byte[1024];     
DatagramPacket incomingPacket = new DatagramPacket(buf, buf.length);


//Opens the socket to receive the packet
public void createAndListen() throws SocketException, IOException{
    Server = new DatagramSocket(9876);     
    Server.receive(incomingPacket);
}

//Simply converts the packet to a string and then prints the message

public void read(){
    String message = new String(incomingPacket.getData());
    System.out.println("Client: " + message);
}


//This methhod will allow the user to print a message to be sent back to the client

public void send() throws IOException{
    System.out.print("Server: ");

    //Receiving input

    BufferedReader response = new BufferedReader(new InputStreamReader(System.in));
    String reply = response.readLine();

    //Getting recipent information

    InetAddress IPAddress = incomingPacket.getAddress();
    int port = incomingPacket.getPort();
    byte[] data = reply.getBytes();

    //Crafting and sending the packet

    DatagramPacket replyPacket = new DatagramPacket(data, data.length, IPAddress, port);
    Server.send(replyPacket);  

}




public static void main(String[] args) throws IOException {
    ServerChat Server = new ServerChat();
    Server.createAndListen();
    Server.read();
    Server.send();


}

谢谢你的帮助! 快速编辑,因为重读似乎并不清晰; 服务器会初始化并侦听,然后接收从客户端发送的数据包,然后可以响应。 在一次发送和接收之后,客户端和服务器都关闭了,这就是即时通讯试图防止的,我希望它们保持打开状态以再次通信。 我知道UDP不是连续连接,所以我认为它更需要服务器能够一致地接收和发送数据包。

编辑2:我对客户端进行了重新编码,以在端口上进行连续循环侦听,并且每次只能处理一条消息。 现在我只需要它连续发送/接收! 尽管随着我从多种不同的方法更改为带有while循环的一种方法,我将对此发表不同的评论。

===============>>#1 票数:0

首先,您必须:-将createAndListen()分为两个方法:套接字必须仅初始化一次,并且必须在receive()上循环。 -然后重新编写您的代码和方法。

main 
    init socket     // only once
    while(some-condition)     // receive loop
        receive()   // this is a blocking method
        reply()     // and send()
    close socket
end

之后,将对代码进行一些重大改进,以使其更加有效和健壮。 查看Google,获取有关Java套接字编程和良好实践的良好材料。

  ask by MDSasquatch translate from so

未解决问题?本站智能推荐:

1回复

使用NodeJS的UDP聊天服务器中的用户名

我正在使用NodeJS设置一个简单的聊天服务器,该服务器仅使用服务器和客户端。 它可以工作,并且我可以在同一台计算机上打开多个客户端窗口,但是现在我需要更多。 我想要: 为每个客户提供设置用户名的选项 让客户端从服务器请求当前时间 诸如“ /我打术士”之类的操作
1回复

UDP游戏服务器/客户端

我正在尝试进行一场坦克比赛,而网络部分出现了问题。 我在服务器上做错了什么? 这是我的服务器代码: 这是我的客户代码: 我正在调用这样的代码: 感谢您的帮助!
1回复

还如何允许服务器上的客户端发送多个消息? 爪哇

我一直在建立一个聊天室,多个客户端可以在同一服务器上进行连接和交谈。 我唯一的问题是让每个客户端发送多个消息。 我一直在尝试使用不同的方法来循环执行此操作,但是我遇到了一些问题。 任何帮助将不胜感激:)谢谢。 这是代码: 我已经尝试过使用while循环不断请求输入,但似乎没有用。
2回复

多客户端Java客户端服务器聊天

我正在尝试编写多客户端服务器聊天记录。 一切都应该在同一台计算机上运行,​​每个客户端在不同的Shell终端控制台中。 我在这边读了几个线程,有人说,我应该为每个连接的客户端在服务器上运行新线程。 因此,这就是我要做的。仍然,服务器正在从其控制台上的每个客户端打印消息,但是客户端只能看到他
2回复

Java服务器仅从1个客户端接收而不是从第二个客户端接收

美好的一天,我试图创建一个客户端/服务器聊天,第一个客户端将消息发送到服务器,服务器将消息发送到客户端2,反之亦然,但是服务器仅从第一个客户端接收消息,而不是从第二个客户端接收消息。 而且,我如何从客户端1向2发送消息,反之亦然 ============================
1回复

客户端未从服务器获得响应

我对此不满意。 如果有人可以帮助我,我会非常高兴。 这是我在这里的第一个端口,因此我尝试尽可能地详尽(如果这是在此处提问的正确方法)。 好。 让我解释一下我遇到的问题。 我正在编写聊天服务器和客户端程序。 我要实现的基本目标是: 1)连接到服务器2)开始发送和接收消息。
1回复

Java中的简单服务器客户端聊天?

这段代码应该是一个ServerSocket,最终是一个可以连接到服务器的客户端。 问题是当调用disconnect事件时显示我发送的所有消息,这意味着当Socket关闭时。 我希望每次调用send事件时立即显示消息。 这怎么可能? }
1回复

使用UDP在服务器和客户端之间进行文件传输(.png,.txt)

我写了一个服务器和客户端,供客户端连接到服务器,并从服务器目录中选择一个数据以使用UDP协议传输数据,但问题是,它仅适用于.txt文件,不适用于.png文件并且在.txt文件中,输出文件与原始文件也不相同,例如单词之间没有一行,所有单词并排打印,而不是逐行打印。 我该如何解决这个问题?
1回复

Java聊天服务器客户端问题

我按照本教程与多客户端和一台服务器进行了聊天: http : //inetjava.sourceforge.net/lectures/part1_sockets/InetJava-1.9-Chat-Client-Server-Example.html,但是我有一个问题,我想要客户端在通过以下命令
1回复

C ++服务器和Java客户端聊天[关闭]

;) 我用C ++服务器和Java客户端编写了一个聊天程序。 负责从客户端接收消息的功能的代码为: 负责将消息发送到服务器的函数thar的代码仅是: ps是一个打印流。 当我向服务器发送消息时,在c ++服务器上说“ hello world”:“ Client: