import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.List;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class Message {
/**
* @param args
*/
DatagramSocket ds = null;
public Message(){
try{
ds = new DatagramSocket(3000);
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] args) {
final Message m = new Message();
//构造界面
final Frame f = new Frame();
final List l = new List(6);
final TextField tfip = new TextField(15);
final TextField tfmeg = new TextField(20);
f.add(l,"Center");
Panel p = new Panel();
f.add(p,"South");
p.setLayout(new BorderLayout());
p.add(tfip,"West");
p.add(tfmeg,"East");
f.setSize(300, 400);
f.setResizable(false);
f.setVisible(true);
//分出一个线程,单独执行接收方法.因为receive方法能够阻碍程序,只有接收到程序才能继续运行.
new Thread(new Runnable(){
public void run() {
//初始化接受的内存缓冲区
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf,1024);
while(true){
try {
m.ds.receive(dp);
String s = new String(dp.getData(),0,dp.getLength());
s += "--"+dp.getAddress().getHostAddress();
l.add(s,0);
} catch (IOException e) {
//如果Socket已经关闭,则不打印异常.
if(m.ds.isClosed()){
}else{
e.printStackTrace();
}
}
}
}
}).start();
//关闭界面监听
f.addWindowListener( new WindowAdapter(){
public void windowClosing(WindowEvent e){
m.ds.close();
f.dispose();
System.exit(0);
}
});
//按回城键发送数据.
tfmeg.addActionListener( new ActionListener(){
public void actionPerformed(ActionEvent e) {
String ip = tfip.getText();
String message = tfmeg.getText();
try {
DatagramPacket dp = new DatagramPacket(message.getBytes(),message.getBytes().length,InetAddress.getByName(ip),3000);
m.ds.send(dp);
tfmeg.setText("");
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
}
}
//在ip地址栏输入:127.0.0.1 ,可以接收到信息,因为127.0.0.1是本地ip,不经过网卡.
//输入本地ip可以也接收到信息.
//输入广播地址的ip,也可以收到信息.
//关于广播地址请看
http://baike.baidu.com/view/473043.htm
分享到:
相关推荐
一个TCP和UPD聊天、传收文件程序;TCP监听线程;发送、接受文件。比较简单,参看源程序;聊天
自己写的简单聊天程序,可以用在外网和内网的通讯.主要使用winsock控件实现.同时使用了UPD和TCP,实现了 一个服务器,多个客户端的聊天..这个程序只实现了群聊.
突然想把以前为这个程序录制视频的作业发布在bilibili上啦〜 于是,就有了 嗯〜当时因为有时间限制,所以视频要做加速处理〜希望不要嫌弃千千啦〜嘤〜 UPD:2019.04.15 看到好多人fork简单说说如何开箱吧
一个聊天小程序,写的不是很成熟,本人在算法学习时涉及一些网络通信的相关的技术,很简单的一个小程序,可以实现简单的聊天
聊天小程序
C#2010写的UDP聊天程序,源代码,有需要的下载看看
一个实现了简单功能的upd聊天室的源码,国内某知名游戏公司的复试题目。代码中实现了多网卡的自动广播和传输数据加密及签名。
socket聊天室程序,采用udp协议编写的简单聊天程序,仿照qq界面。
基于MFC、socket、UDP,实现了文本消息的收发和文件传输的功能。
#聊天系统##About ChatSystem 是一个由 Joe Ferrer 制作的基本 Java 程序,它允许多个用户通过由任意主机/其中一个用户托管的私人服务器进行聊天。 通过 Client-Server 架构,假设 ChatSystem-server 正在运行,所有...
分别死UPD和tcp写的聊天程序 比较简洁 适合新手
这里是今天敲的一段代码是用upd聊天器,代码的内容并不难,只不过是注解太多显得很长。在这里我直接把B站课程链接发给大家,大家可以看一看主播如何讲解的这一段代码。 """" #一,功能 发送信息 接受信息 退出程序 #...
Geckos.io非常适合您的下一个HTML5实时多人游戏或聊天应用程序。 :megaphone: 公告:版本2 版本2可能很快就会面世,并且性能会大大提高。 该API保持不变。 唯一改变的是WebRTC实现。 我从切换到 。 与wrtc相比,...