让一线程不停地监听某一端口这样写对吗?...

wangjinbao 2004-04-10 02:16:19
public class ReceiveMsg extends Thread
{
int sendport = 5264;
int receiveport = 5140 ;

public void run()
{
try{


byte[] buffer = new byte[8192] ;
DatagramPacket receivePacket = new DatagramPacket(buffer,buffer.length) ;
DatagramSocket receiveSocket = new DatagramSocket(receiveport) ;
receiveSocket.receive(receivePacket) ;
System.out.println(new String(receivePacket.getData()).trim()+receivePacket.getAddress().toString());
}catch(Exception e){}
}

public static void main(String[] args)
{
while(true){new ReceiveMsg().start();}
}
}
...全文
76 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
garry2000 2004-04-12
  • 打赏
  • 举报
回复
我没太看你们的代码
不过我给你个意见
让端口不停的去监听很费资源
你这样做

让客户端去访问服务器
让客户端成为主动的,这样不但可以收到数据 还能及时的更新
RomandAccessFile 2004-04-11
  • 打赏
  • 举报
回复
你要用的收到的端口和你发送的口必须不一样
slm51888 2004-04-11
  • 打赏
  • 举报
回复
public 太多!
xcopy 2004-04-11
  • 打赏
  • 举报
回复
用同一个端口会冲突。
mietian 2004-04-10
  • 打赏
  • 举报
回复
当然不能公用同一个端口!!:)
wangjinbao 2004-04-10
  • 打赏
  • 举报
回复
那我同时启动两线程为什么错?
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import java.net.*;
public class SendTer extends Frame implements Runnable,ActionListener
{
String outMessage;
int sendport = 5264;
int receiveport = 5140 ;
Frame f=new Frame("网络聊天");
Panel p=new Panel();
Panel p1=new Panel();
Panel q=new Panel();
Button b=new Button("聊天");
Button b1=new Button("传送文件");
Button b2=new Button("exit");
Button b3=new Button("config");
TextArea text=new TextArea(10,30);
TextArea text1=new TextArea(10,30);
TextField sr=new TextField(30);
public void init() {
p.add(text);
p.add(text1);
p1.add(sr);
q.add(b);
q.add(b1);
q.add(b2);
q.add(b3);
f.setLayout(new BorderLayout());
f.add(p,BorderLayout.NORTH);
f.add(p1,BorderLayout.CENTER);
f.add(q,BorderLayout.SOUTH);
f.pack();
f.setVisible(true);
b.addActionListener(this);
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
f.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e)
{System.exit(1);}});
}
public void SendTer(String outMessag)
{
outMessage=outMessag;


}
public void actionPerformed(ActionEvent e)
{
if(e.getSource().equals(b)){
outMessage = sr.getText().toString();
SendTer(outMessage);
sr.setText("");
this.run();

}
}

public void run()
{
try{

DatagramSocket socket = new DatagramSocket(sendport);
socket.setSoTimeout(5000); //不用端口也可
//send block

byte [] data = outMessage.getBytes();
DatagramPacket packet = new DatagramPacket(data,data.length,InetAddress.getByName("localhost"),receiveport);
//这里的端口必须是接收端的端口
text.append(InetAddress.getByName("localhost")+outMessage+'\n');
socket.send(packet);
socket.close();
}catch(Exception e){}}

class ReceiveMsg extends Thread
{
public void run()
{
try{
byte[] buffer = new byte[8192] ;
DatagramPacket receivePacket = new DatagramPacket(buffer,buffer.length) ;
DatagramSocket receiveSocket = new DatagramSocket(receiveport) ;
while(true){
receiveSocket.receive(receivePacket) ;
System.out.println(new String(receivePacket.getData()).trim()+receivePacket.getAddress().toString());
}
}catch(Exception e1){}
}
}


public static void main(String[] args)
{
new SendTer().init();
new ReceiveMsg().run();
}

}
wangjinbao 2004-04-10
  • 打赏
  • 举报
回复
谢谢
xcopy 2004-04-10
  • 打赏
  • 举报
回复
public class ReceiveMsg extends Thread
{
int sendport = 5264;
int receiveport = 5140 ;

public void run()
{
try{


byte[] buffer = new byte[8192] ;
DatagramPacket receivePacket = new DatagramPacket(buffer,buffer.length) ;
DatagramSocket receiveSocket = new DatagramSocket(receiveport) ;
while(true){
receiveSocket.receive(receivePacket) ;
System.out.println(new String(receivePacket.getData()).trim()+receivePacket.getAddress().toString());
}
}catch(Exception e){}
}

public static void main(String[] args)
{
(new ReceiveMsg()).start();
}
}

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧