- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
嗨,我使用数据报制作了一个回显客户端-服务器代码。代码正在运行,从客户端发送的消息在服务器端被接收,然后它们被回显给客户端。以下场景显示了我遇到的问题
1->客户端:嗨,服务器:嗨, 回应:嗨
2->客户端:你好,服务器:你好, 回复:你好现在,当客户端输入一条比上一条短的消息时,会发生以下情况
3->客户端:K,服务器:Kello, 回显:K
我不明白为什么服务器打印上一条消息的其余字符,这是服务器端代码:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
import javax.swing.SwingUtilities;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class Server extends JFrame {
int port;
// JTextField textField;
JButton resendPacket;
JTextArea chatWindow;
DatagramSocket socket;
private final int PACKET_SIZE = 124;
private final int port_Number = 6789;
DatagramPacket packet = new DatagramPacket(new byte[PACKET_SIZE], PACKET_SIZE);
InetAddress host;
public Server() {
super("INSTANT ECHO - SERVER");
resendPacket = new JButton("Echo");
chatWindow = new JTextArea();
// add(resendPacket, BorderLayout.SOUTH);
add(new JScrollPane(chatWindow));
setSize(300, 300);
setVisible(true);
}
public void startRunning() {
try {
port = 6777;
socket = new DatagramSocket(port);
showMessage("Server is Ready... \n");
/*resendPacket.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
try {
socket.send(packet);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}); */
while(true)
{
processPacket();
}
} catch (SocketException e) {
// TODO: handle exception
showMessage("\n Could not send packet!\n");
e.printStackTrace();
}
}
private void processPacket() {
// create a packet
// receive a packet
try {
socket.receive(packet);
} catch (IOException e) {
// TODO Auto-generated catch block
showMessage("\nCould not receive Packet");
e.printStackTrace();
}
try {
socket.send(packet);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// display the contents of the packet
showMessage(new String(packet.getData()));
// send the packet again to the sender
}
public void showMessage(final String text) {
SwingUtilities.invokeLater(
new Runnable() {
public void run() {
chatWindow.append("\n Packet Data : " + text);
}
});
}
}
这是客户端代码
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class Client extends JFrame {
int port = 6777;
JTextField textField;
String data = "hello" ;
// JButton sendPacket;
JTextArea chatWindow;
DatagramSocket socket;
DatagramPacket packet;
private final int PACKET_SIZE = 124;
InetAddress host;
public Client() {
super("INSTANT ECHO - CLIENT");
textField = new JTextField();
try {
host = InetAddress.getByName("127.0.0.1");
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
showMessage("\n Could not find local host");
e.printStackTrace();
}
尝试{
socket = new DatagramSocket();
} catch (SocketException e) {
// TODO Auto-generated catch block
showMessage("\n Could not find Socket");
e.printStackTrace();
}
// textField.setEditable(false);
textField.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
// TODO Auto-generated method stub
data = event.getActionCommand();
showMessage(event.getActionCommand());
startRunning();
textField.setText("");
}
});
chatWindow = new JTextArea();
add(textField, BorderLayout.SOUTH);
add(new JScrollPane(chatWindow));
setSize(300, 300);
setVisible(true);
}
public void startRunning() {
byte[] bytes_to_send = data.getBytes();
DatagramPacket packet = new DatagramPacket(bytes_to_send,
bytes_to_send.length, host, port);
try {
sendPacket(packet);
setTime();
receivePacket(packet);
socket.receive(packet);
showMessage("\n" + new String(packet.getData()));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
//closeCrap();
}
}
private void sendPacket(DatagramPacket packet) {
try {
textField.setEditable(true);
socket.send(packet);
} catch (IOException e) {
// TODO Auto-generated catch block
showMessage("\nUnable to send Packet !");
e.printStackTrace();
}
}
private void setTime() {
try {
socket.setSoTimeout(5);
} catch (SocketException e) {
// TODO Auto-generated catch block
showMessage("\nRequest Time Out");
e.printStackTrace();
}
}
private void receivePacket(DatagramPacket packet) {
packet = new DatagramPacket(new byte[PACKET_SIZE], PACKET_SIZE);
try {
socket.receive(packet);
} catch (IOException e) {
// TODO Auto-generated catch block
showMessage("\n Unable to receive packet\n");
e.printStackTrace();
}
showMessage("\n Echoed Message --> "+new String(packet.getData()));
}
private void closeCrap() {
socket.close();
}
private void showMessage(final String data) {
SwingUtilities.invokeLater(
new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
chatWindow.append("\n" + data);
}
});
}
}
谁能告诉我为什么前面的字符会被打印出来吗?
最佳答案
DatagramPacket.getLength()已使用的缓冲区的长度。
尝试
showMessage(new String(packet.getData(), 0, packet.getLength()));
关于java - 为什么我的回显服务器有时会在消息末尾出现垃圾数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13159915/
"); ..... 回显 (""); ?> 是什么意思?
问题是标签 我看过我正在编写的一个脚本,并使用了它: echo (""); ........ echo (""); 它到底做了什么? 它是 Html 标签还是 PHP? 我在 Google 上进行了
我正在创建一个结帐系统。我分为三个部分: 送货信息 付款信息 订单确认 我正在尝试找出一种方法,当客户输入他们的送货信息时,该数据可以回显到我的订单确认部分,这样他们就可以确认这是他们想要将其运送到的
我正在 MYSQL 表上运行 SELECT 代码 我有一个 MYSQL 表: CREATE TABLE mytable ( wf_id int(11) UNSIGNED NOT NULL, sessi
我想要做的是回显页面顶部的内容,同时捕捉页面底部的内容。 这是我的脚本: Westpop Wachtwoord moet minstens 8 tekens lang
我在将选择列表放在 HTML 中时遇到了一些困难,其中的选项或值是从数据库中的表中检索的。我得到以下结果: 如您所见,这不是我的本意,我宁愿将所有选项都放在 1 个选择列表中,并且可以单击多个选项。
我的代码有问题。我有这段代码: Title Welcome loggedin:
我需要使用 PHP 仅回显 .txt 文件中的选定行。txt 文件内容如下所示: 1 111 111 111 111 111 111 111 111 111 111 2 196 182 227 190
我需要使用 PHP 仅回显 .txt 文件中的选定行。txt 文件内容如下所示: 1 111 111 111 111 111 111 111 111 111 111 2 196 182 227 190
我想从 PHP 回显一些 HTML,其中包含一个链接,上面有文本“ ' '; 最佳答案 如果您想显示文字小于号,请根据 HTML 规范将其编码为 <。 您可能还想查看另一个相关实体:«。这会产生一个
如果我从名为 categories 的 mysql 表中调用链接列表,我想我使用的选择语句如下: $query = "SELECT cat_name, cat_description FROM c
所以,伙计们,我的问题是我正在从一个 mysql 列创建一个数组,但是,当我回显数组项时,它什么也没返回,我有一段时间没有看到一个可能的错误,希望能得到一些帮助。这是我的代码:(我知道 mysql 到
在下面的代码中,我在 php 文件中回显了 $strXML,它显示了整个 $strXML,但我只想在 javascript 中显示“名称”元素值。谁能帮帮我? PHP: $strXML = ''."\
我有一节课用这段代码 public boolean busybox() throws IOException { try { Process p =Ru
我有一个 SQL 查询,出于安全目的,我最近将其转换为准备好的语句。我有一个查询返回许多行,每行由许多列组成。我的问题是如何使用 while 循环回显结果。到目前为止我的例子: $stmt = $co
我尝试这样的事情: function userrank($userid){ $sql = mysql_query("SELECT * FROM users ORDER BY atacs DES
我正在尝试进行选择查询并将此信息输出到 html 标签中,但是它不断将 php 代码转换为: 我做错了什么?为什么它不返回错误而不是将其转换为上面的错误? 代码 $con = mysqli_conn
抱歉含糊其辞,但我有一个 PHP 脚本,它从数据库中提取数据并显示它,但是它不是输出数据库的内容,而是输出“数组”的次数。 (无法再次工作,脚本已上传 here ),脚本的输出也是 here .)谢谢
我有一个工作代码并将其移动到一个新服务器,从 php5 到 php7。谷歌搜索一周没有帮助我,所以我问你们。 我在 sql 数据库中有一些带有欧元符号的信息: 99.00该信息存储为 utf16-ge
这是我的代码: 0){ $info = mysql_fetch_assoc($result); while($row = mysql_fetch_assoc($result)){
我在查找有关此主题的信息时遇到了一些真正的困难,如果您有任何帮助,我将非常感激。简而言之,我有一个表单,用户可以从下拉列表中选择一个类别,输入一些内容,然后点击提交,然后转到 SQL。下拉列表中的每个
我是一名优秀的程序员,十分优秀!