Java TCP消息未收到超过1次
错误:线程“AWT-EventQueue-0”java.lang.RuntimeException:不可编译的源代码-错误的符号类型:bSendMessageActionPerformed考虑使用ObjectOutputStream/ObjectInputStream并通过套接字写入对象。 java2s.com上有很多例子Java TCP消息未收到超过1次,java,tcp,client,Java,Tcp,Client,错误:线程“AWT-EventQueue-0”java.lang.RuntimeException:不可编译的源代码-错误的符号类型:bSendMessageActionPerformed考虑使用ObjectOutputStream/ObjectInputStream并通过套接字写入对象。 java2s.com上有很多例子 请注意,如果要多次写入同一对象,则需要在写入前重置()流,然后刷新。考虑使用ObjectOutputStream/ObjectInputStream并通过套接字写入对象。 j
请注意,如果要多次写入同一对象,则需要在写入前重置()流,然后刷新。考虑使用ObjectOutputStream/ObjectInputStream并通过套接字写入对象。 java2s.com上有很多例子
请注意,如果要多次写入同一对象,则需要在写入前重置()流,然后在写入后刷新。为什么每次单击按钮都要打开并关闭套接字。创建一个类,该类允许您在应用程序运行期间保持套接字打开。套接字连接可以在应用程序启动时完成
class SomeUI
{
SocketMessageSender messageSender;
// ensure that its initialized ...
private void bSendMessageActionPerformed(java.awt.event.ActionEvent evt) {
try {
// TODO add your handling code here:
messageSender.sendMessage(jMessage.getText());
jMessage.setText("");
} catch (IOException ex) {
Logger.getLogger(TeKServer.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
希望对你有帮助
假设你有一个像
public class SocketMessageSender
{
private String host;
private int port;
private DataOutputStream dos;
public SocketMessageSender(String host, int port)
{
this.host = host;
this.port = port;
}
// call when application starts
public void initConnection() throws IOException
{
InetAddress address = InetAddress.getByName(host);
Socket connection = new Socket(address, port);
dos = new DataOutputStream(connection.getOutputStream());
}
//call from button click
public void sendMessage(String message) throws IOException
{
if(dos != null)
{
dos.writeUTF(message);
dos.flush();
}
}
// call when application exits
public void closeConnection() throws IOException
{
if(dos!= null)
{
dos.close();
}
}
}
我认为类签名应该是这样的
class SomeUI
{
SocketMessageSender messageSender;
// ensure that its initialized ...
private void bSendMessageActionPerformed(java.awt.event.ActionEvent evt) {
messageSender.sendMessage(jMessage.getText());
jMessage.setText("");
}
}
为什么每次点击按钮都要打开和关闭插座。创建一个类,该类允许您在应用程序运行期间保持套接字打开。套接字连接可以在应用程序启动时完成
class SomeUI
{
SocketMessageSender messageSender;
// ensure that its initialized ...
private void bSendMessageActionPerformed(java.awt.event.ActionEvent evt) {
try {
// TODO add your handling code here:
messageSender.sendMessage(jMessage.getText());
jMessage.setText("");
} catch (IOException ex) {
Logger.getLogger(TeKServer.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
希望对你有帮助
假设你有一个像
public class SocketMessageSender
{
private String host;
private int port;
private DataOutputStream dos;
public SocketMessageSender(String host, int port)
{
this.host = host;
this.port = port;
}
// call when application starts
public void initConnection() throws IOException
{
InetAddress address = InetAddress.getByName(host);
Socket connection = new Socket(address, port);
dos = new DataOutputStream(connection.getOutputStream());
}
//call from button click
public void sendMessage(String message) throws IOException
{
if(dos != null)
{
dos.writeUTF(message);
dos.flush();
}
}
// call when application exits
public void closeConnection() throws IOException
{
if(dos!= null)
{
dos.close();
}
}
}
我认为类签名应该是这样的
class SomeUI
{
SocketMessageSender messageSender;
// ensure that its initialized ...
private void bSendMessageActionPerformed(java.awt.event.ActionEvent evt) {
messageSender.sendMessage(jMessage.getText());
jMessage.setText("");
}
}
服务器代码的作用是什么?服务器代码工作得很好,因为我也在PHP端对其进行了测试,服务器接收来自客户端的传入调用,并在服务器聊天室中显示出来。所有这些都不应该在actionPerformed方法中完成。他们不应该执行阻塞操作。那么你建议我主要在哪里做呢?因为如果我在main中使用它,我将无法使用String process=jMessage.getText();如果我在run()中运行,我的应用程序将因TCP连接而冻结(?)你的问题与你的服务器代码有关,你不准备显示你的服务器代码..?服务器代码做什么?服务器代码工作正常,因为我也在PHP端对其进行了测试,服务器接收来自客户端的传入呼叫,并在服务器聊天室中显示。所有这些都不应在actionPerformed方法中完成。他们不应该执行阻塞操作。那么你建议我主要在哪里做呢?因为如果我在main中使用它,我将无法使用String process=jMessage.getText();如果我在run()中运行,我的应用程序将因TCP连接而冻结(?)你的问题与你的服务器代码有关,而你不准备显示你的服务器代码..?怎么会这样?对不起,我是java新手,如果你能做一个示例代码的话,我很想知道这是怎么回事?很抱歉,我是java新手,如果你能给我举个例子,我会很高兴的。谢谢,这正是我所需要的。。帮助很大。另外,如果你能告诉我,当点击按钮时,上面的代码是如何知道的?我的意思是在sendMessage中我应该添加onClickListener吗?它给了我这个错误:线程“AWT-EventQueue-0”java.lang.RuntimeException中的异常:不可编译的源代码-错误的符号类型:BSendMessageActionPerformed你现在可以共享你的源代码了吗,完整的类就可以了。这里:如果这些代码看起来有点混乱(因为我用的是jframe,但在代码中你会看到按钮的初始化,这可能会使代码看起来有点混乱,那么请让我知道我会试试ogranise它所有的我现在要去吃午饭,给我15分钟,我马上回来为你提供一切你需要的帮助我解决这个问题:谢谢,这正是我需要的..他lped很多。另外,如果您能告诉我上面的代码如何知道按钮何时被点击?我的意思是在sendMessage中,我应该添加onClickListener吗?它给了我这个错误:线程“AWT-EventQueue-0”中的异常java.lang.RuntimeException:不可编译的源代码-错误的符号类型:BSendMessageActionPerformed您现在可以共享您的源代码了,完整的类就好了。这里:如果这些代码看起来有点混乱(因为我用的是jframe,但是在代码中你会看到按钮的初始化,这可能会让代码看起来有点混乱,那么请告诉我我会试试ogranise它allI我现在要去吃午饭,请给我15分钟的时间,我马上回来给你提供一切你需要的帮助我解决这个问题:D