当前位置:首页 » 编程语言 » javaudp通信

javaudp通信

发布时间: 2022-11-22 10:01:31

java udp如何通过一个对象完成接收和发送数据

//注意,本地ip以及端口,广播Ip以及端口,可根据自己的电脑实际情况定.我的三段是2
//思路:我用的udp启动服务端,进行侦听,如果有消息,就该频段广播一次..
//客户端使用多线程,一个发送服务端,一个接受广播..就当我复习了一次...!
importjava.io.IOException;
importjava.net.DatagramPacket;
importjava.net.DatagramSocket;
importjava.net.InetAddress;
importjava.net.InetSocketAddress;
importjava.net.SocketAddress;
importjava.util.Scanner;
publicclassUdpTest{
classSendTest{
privateintcount=1;
privateScannersc;
privatebyte[]by,by2;
privateInetAddressip;
privateSocketAddresssd1,sd2;
privateDatagramSocketds,ds2;
privateDatagramPacketdp,dp2;
SendTest(StringipName,intport)throwsException{
sc=newScanner(System.in);
ip=InetAddress.getByName(ipName);
sd1=newInetSocketAddress(ip,port);//发送的目标:ip+端口
sd2=newInetSocketAddress(19823);//己方,省略ip,默认自己本地地址
ds=newDatagramSocket();//参数为自己的标识
//接受
by2=newbyte[1024];
ds2=newDatagramSocket(sd2);
send();
}
privatevoidsend()throwsIOException{
newThread(){
publicvoidrun(){
while(true){
by=sc.nextLine().getBytes();
dp=newDatagramPacket(by,by.length,sd1);//数组,数组长度,目标ip+端口
try{
ds.send(dp);
}catch(IOExceptione){
e.printStackTrace();
}//推送服务;
System.out.println("老马第:"+count+++"条信息发送完成!");
}
}
}.start();
newThread(){
publicvoidrun(){
while(true){
dp2=newDatagramPacket(by2,by2.length);
try{
ds2.receive(dp2);
System.out.println("老马接受到一条广播可能来自老宋:"+newString(by2,0,dp2.getLength()));
}catch(IOExceptione){
e.printStackTrace();
}
}
}
}.start();
}
}
classAccepTest{
privatebyte[]by;
privateSocketAddresssd1,sd2;
privateDatagramSocketds;
privateDatagramPacketdp;
privateintcount=0;
AccepTest()throwsException{
by=newbyte[1024];
sd1=newInetSocketAddress("192.168.2.255",19823);//广播
sd2=newInetSocketAddress(19822);//己方,省略ip,默认自己本地地址
ds=newDatagramSocket(sd2);//参数为自己的标识,这是用来接受的.....
accepts();
}
privatevoidaccepts()throwsIOException{
while(true){
count++;
System.out.println("老宋的服务器接受第:"+count+"次数据:...");
dp=newDatagramPacket(by,by.length);//数组,数组长度,仅仅用来接收;
ds.receive(dp);//接受服务;
Stringstr=newString(by,0,dp.getLength());
System.out.println("老宋接受到数据--------->"+str);
System.out.println();
//广播..
by=("插个广播:"+str+"....谁发的??").getBytes();
dp=newDatagramPacket(by,by.length,sd1);
ds.send(dp);
}
}
}
publicstaticvoidmain(String[]args)throwsException{
newThread(){
publicvoidrun(){
try{
newUdpTest().newAccepTest();
}catch(Exceptione){
e.printStackTrace();
}
}
}.start();
newThread(){
publicvoidrun(){
try{
newUdpTest().newSendTest("127.0.0.1",19822);
}catch(Exceptione){
e.printStackTrace();
}
}
}.start();
}
}

❷ java 怎么实现不指定端口号的UDP通信

解决了没有?没有就给个简单的答案给你参考哈哈(记得给分哦): 思想就是你想的那样用随机端口的方案:(由于这个端口要求是1024以上的哈)在登录页面(LoginInterface.java)加上这个函数:public int getrandomport() {
int port = 0;
Random rm = new Random();
int j = 0;
for (i = 0; i < 10; i++) {
j = rm.nextInt(20000);
if (j > 1111) {
port = j;
}
}
return port;
} 将这个函数的返回值用一个静态变量保存起,以备我们在日后UDPchat.java上使用,同时我们将其放入到用户登录时的USer表中port列下。 ...................................port =String.valueOf(getrandomport());
String updatesql = "update user set status='" + status + "',tmpip='" + tmpip + "',tmpport='" + port + "'where usr_id='" + usr_id + "' ";
st.executeUpdate(updatesql);.................................. 在UDPchat页面的构造方法中new 以个thread:用来接收别人发来的数据。其监听端口为自己登陆时所产生的那个随机端口new Thread() {// receive data
public void run() {
DatagramSocket ds = null;
try {
int acceptport = Integer.parseInt(LoginInterface.port);
ds = new DatagramSocket(acceptport);
} catch (Exception e1) {
e1.printStackTrace();
}
byte[] data = new byte[1024];
DatagramPacket dp = new DatagramPacket(data, data.length);
while (true) {
try {
ds.receive(dp);
String ip = new String(dp.getAddress().getHostAddress());
String port = String.valueOf(dp.getPort());
String str = new String(dp.getData());
String sum = "From: " + ip + " Port:" + port
+ " receive data: " + str;
receives.add(sum, 0);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}.start(); 另外构造一个send 方法用来发送自己的消息:部分代码如下:.............................try {
// send data
if (sends.getText().equals("")) {
JOptionPane.showMessageDialog(null, "输入内容不能为空");
} else {
int port = Integer.parseInt(MainInterface.port);
byte[] buf = sends.getText().getBytes();
InetAddress address = InetAddress.getByName(MainInterface.ip);
DatagramPacket dp = new DatagramPacket(buf, buf.length,
address, port);// destinate port
ds.send(dp);
receives.add("我说: " + sends.getText(), 0);
sends.setText("");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
ds.close();
}................................此处的MainInterface.ip和MainInterface.port是当我们双击面板上的某个欲和他聊天的用户(根据好友名字从数据库中取出的好友的ip 和他机子所监听的端口号) 实验过了,没有问题了哈。

❸ JAVA UDP通信为什么只能接收一次数据,我想要时刻接收数据,并更新UI,大神们帮我看看程序吧

开始是使用
new udpReceiveThread()。。。。。。。。。

终止也是使用
new udpReceiveThread()

操作的是完全不同的一个线程 了

❹ java udp通信中文乱码

java记住不要使用 xxxx.getBytes()
一定要使用 xxxx.getBytes("UTF-8") 或者 xxxx.getBytes("GBK")
解析时也要 new String(byte[] , "UTF-8")

❺ 一个简单java实现udp通信

UDP也可以和TCP那样遍历list然后发送啊
客户端向外面开一个UDP端口接受数据报
然后服务器这边要是有消息要发送就直接发送数据报包就可以了嘛
UDP都不用保持着连接的,比TCP还简单些

另外也可以用组播来实现,搜索下java UDP 组播,你能找到不少实例性的代码,也有聊天室的代码

❻ TCP和UDP通信有什么区别 如何分别用java实现

TCP是面向连接,UDP面向非连接,资料不复制,在这里简单说下:x0dx0aTCP建立连接时需要传说的三次握手,服务端与客户端需要确认对方身份而已,建立好连接后,就开始传递消息,直到有一方断开连接位置。 就好比两个人打电话,要先通了才能说话。x0dx0aUDP只是数据报发送,它的优点速度快,并非要向TCP那样麻烦建立,它只负责将信息发出,但是并不确保信息的准确完整性等,就好比发短信,短信是出去了,但是中间是否有问题,是否对方手机能收到就不管了。x0dx0a在java中想要实现上述两种协议通信,可采用socket建立连接,socket可以理解为码头,其实是套接字,这里简单说下,就好比两个城市运输货物,通过码头走货一样。至于如何通过socket建立两个连接,网上资料多的是,在这里不复制例子了。

❼ java中UDP通信,两边都怎么也接收不了,都是阻塞状态。

你要先运行UdpServer2,因为它是服务器

❽ java udp 请求会阻塞吗

java中UDP通信,两边都接收不了,都是阻塞状态,要先运行UdpServer2,因为它是服务器

❾ java中UDP文件传输怎么实现

java UDP连接,如果要发送文件的话,你只能自己定义一系列的协议
因为TCP UDP 双方发送都是二进制数据
那么这个实现非常复杂
得不停的发送数据,写数据,建议使用http协议

❿ java 中,udp 里面的datagramsocket需不需要connect之后才能通信

不需要,udp是无连接的协议,在通信前不需要建立连接,这个函数基本上用不到。

热点内容
mc外国服务器地址名称 发布:2025-01-16 11:09:45 浏览:17
用脚本砍价 发布:2025-01-16 11:04:36 浏览:680
公司密码包括什么 发布:2025-01-16 11:04:04 浏览:544
php批量查询 发布:2025-01-16 10:43:38 浏览:917
适合搭建代理服务器的云 发布:2025-01-16 10:42:49 浏览:428
我的世界手机版服务器怎么注册 发布:2025-01-16 10:41:30 浏览:614
小米云电视服务器 发布:2025-01-16 10:37:03 浏览:350
php开源wiki 发布:2025-01-16 10:27:19 浏览:189
sql加字段备注 发布:2025-01-16 10:21:49 浏览:565
线割编程教程 发布:2025-01-16 10:21:03 浏览:18