java UDP编程 两个客户端是怎么互相通讯的,类似qq那样的 客户端创建时要指定端口吗 开n个窗口要n个端口吗?关于c#中UDP编程
本文目录
- java UDP编程 两个客户端是怎么互相通讯的,类似qq那样的 客户端创建时要指定端口吗 开n个窗口要n个端口吗
- 关于c#中UDP编程
- 推荐关于UDP协议的Java编程的书
- 用java的Udp写聊天程序,为什么不能实现一个端口号同时向两个端口号发送消息不知如何实现,请高手解答
- 各位大虾,急需java的基于udp的即时通讯实例;需要客户端和服务器端;不要数据库的;
- java编程 利用UDP方式,客户端向服务器发送三边值,服务器,根据三边值计算三角形面积返回客户端
- java中如何检测本机指定的UDP服务端口是否被占用并且自动分配一个可用udp端口;
java UDP编程 两个客户端是怎么互相通讯的,类似qq那样的 客户端创建时要指定端口吗 开n个窗口要n个端口吗
UDP是无连接通信,不需要独占端口,所以开一个端口可以接收所有机器发来的消息。可以指定一个端口,所有的客户端都用这个端口接收消息。或者服务器告诉发信人收信人的端口,跟IP地址一样,由服务器统计。
关于c#中UDP编程
//这是一个源码你看看using System;using System.Net;using System.Net.Sockets;using System.Text;using System.Threading;using System.Windows.Forms;namespace UDPClient{ public partial class frmUdp : Form { private UdpClient sendUdpClient; private UdpClient receiveUpdClient; public frmUdp() { InitializeComponent(); IPAddress ips = Dns.GetHostAddresses(““); tbxlocalip.Text = ips.ToString(); int port = 51883; tbxlocalPort.Text = port.ToString(); tbxSendtoIp.Text = ips.ToString(); tbxSendtoport.Text = port.ToString(); } // 接受消息 private void btnReceive_Click(object sender, EventArgs e) { // 创建接收套接字 IPAddress localIp = IPAddress.Parse(tbxlocalip.Text); IPEndPoint localIpEndPoint = new IPEndPoint(localIp, int.Parse(tbxlocalPort.Text)); receiveUpdClient = new UdpClient(localIpEndPoint);Thread receiveThread = new Thread(ReceiveMessage); receiveThread.Start(); } // 接收消息方法 private void ReceiveMessage() { IPEndPoint remoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0); while (true) { try { // 关闭receiveUdpClient时此时会产生异常 byte receiveBytes = receiveUpdClient.Receive(ref remoteIpEndPoint); string message = Encoding.Unicode.GetString(receiveBytes); // 显示消息内容 ShowMessageforView(lstbxMessageView, string.Format(“{0}“, remoteIpEndPoint, message)); } catch { break; } } } // 利用委托回调机制实现界面上消息内容显示 delegate void ShowMessageforViewCallBack(ListBox listbox, string text); private void ShowMessageforView(ListBox listbox, string text) { if (listbox.InvokeRequired) { ShowMessageforViewCallBack showMessageforViewCallback = ShowMessageforView; listbox.Invoke(showMessageforViewCallback, new object { listbox, text }); } else { lstbxMessageView.Items.Add(text); lstbxMessageView.SelectedIndex = lstbxMessageView.Items.Count - 1; lstbxMessageView.ClearSelected(); } } private void btnSend_Click(object sender, EventArgs e) { if (tbxMessageSend.Text == string.Empty) { MessageBox.Show(“发送内容不能为空“,“提示“); return; } // 选择发送模式 if (chkbxAnonymous.Checked == true) { // 匿名模式(套接字绑定的端口由系统随机分配) sendUdpClient = new UdpClient(0); } else { // 实名模式(套接字绑定到本地指定的端口) IPAddress localIp = IPAddress.Parse(tbxlocalip.Text); IPEndPoint localIpEndPoint = new IPEndPoint(localIp, int.Parse(tbxlocalPort.Text)); sendUdpClient = new UdpClient(localIpEndPoint); } Thread sendThread = new Thread(SendMessage); sendThread.Start(tbxMessageSend.Text); } // 发送消息方法 private void SendMessage(object obj) { string message = (string)obj; byte sendbytes = Encoding.Unicode.GetBytes(message); IPAddress remoteIp = IPAddress.Parse(tbxSendtoIp.Text); IPEndPoint remoteIpEndPoint = new IPEndPoint(remoteIp, int.Parse(tbxSendtoport.Text)); sendUdpClient.Send(sendbytes, sendbytes.Length, remoteIpEndPoint); sendUdpClient.Close(); // 清空发送消息框 ResetMessageText(tbxMessageSend); } // 采用了回调机制 // 使用委托实现跨线程界面的操作方式 delegate void ResetMessageCallback(TextBox textbox); private void ResetMessageText(TextBox textbox) { // Control.InvokeRequired属性代表 // 如果控件的处理与调用线程在不同线程上创建的,则为true,否则为false if (textbox.InvokeRequired) { ResetMessageCallback resetMessagecallback = ResetMessageText; textbox.Invoke(resetMessagecallback, new object { textbox }); } else { textbox.Clear(); textbox.Focus(); } } // 停止接收 private void btnStop_Click(object sender, EventArgs e) { receiveUpdClient.Close(); } // 清空接受消息框 private void btnClear_Click(object sender, EventArgs e) { this.lstbxMessageView.Items.Clear(); } }}
推荐关于UDP协议的Java编程的书
1.《零基础学Java电子教程》(机械工业出版社) ,Java程序设计教程(第2版)基础篇 机械工业出版社 , Java程序设计教程(第2版)进阶篇 机械工业出版社2.《JAVA编程思想》3.《锋利的jQuery》4. 《CSS实战手册.第2版》.(美)麦克法兰5.《Spring揭秘》这些书是我仔细研究过的书,讲解的通俗易懂,也很经典,具有代表性。受益匪浅
用java的Udp写聊天程序,为什么不能实现一个端口号同时向两个端口号发送消息不知如何实现,请高手解答
使用DatagramSocket和DatagramPacket其中DatagramSocket使用一个发送的端口号DatagramPacket的参数DatagramPacket(bytes bytes,int bytes.length,InetAddress ip, int port);里的port就是目标端口要向两个端口号发送,需要创建两个DatagramPacket,分别填写两个IP地址和端口号,并用DatagramSocket发送。另外两个端口需要做监听要注意ip要为局域网可以畅通无阻,广域网可能导致网管阻止下面是个例子,发两遍即可。int SERVER_PORT=7000;String severIp=“192.168.1.100“;DatagramSocket clientSocket;try {InetAddress local = InetAddress.getByName(severIp); DatagramPacket dPacket; clientSocket = new DatagramSocket;dPacket = new DatagramPacket(“Hello“.getBytes(“utf-8“),“Hello“.getBytes(“utf-8“).length, local, SERVER_PORT);clientSocket.send(dPacket);//这里是发送byte msg = new byte;DatagramPacket rPacket = new DatagramPacket(msg, msg.length); clientSocket.receive(rPacket);//这里是接收监听} catch (IOException e) {e.printStackTrace(); } clientSocket.close();
各位大虾,急需java的基于udp的即时通讯实例;需要客户端和服务器端;不要数据库的;
给你解释一下过程:基于TCP / IP模式:服务器,打开监听线程(也可以留言??,让系统管理线程)收到的每个请求创建一个套接字每一个插座和一个根据客户端的连接请求,客户端选择合适的客户端套接字绑定,刚刚接到一个客户的信息直接转发到另一个客户端 每个客户端初始化后,立即播出时间已建立UDP模式:在收到客户端的链表保存这个客户给自己的客户。需要自定义消息,包括自己的ID和接收器ID。其他类似TCP模式。
java编程 利用UDP方式,客户端向服务器发送三边值,服务器,根据三边值计算三角形面积返回客户端
创建两个类 分别添加main方法 一个作为server类一个作为client类
客户端先发送再接收 服务器端先接收再发送
下面给你一个server和client的例子 你在基础上改一下就行了
client发送的时候发送三边值 server接收后 写一个计算三角形面积的函数 把接收到的三边值传入函数计算出结果作为数据返回到client端
/** *UDPServer */import java.io.*;import java.net.*;class UDPServer{ public static void main(String args)throws IOException{ DatagramSocket server = new DatagramSocket(5050); byte recvBuf = new byte; DatagramPacket recvPacket = new DatagramPacket(recvBuf , recvBuf.length); server.receive(recvPacket); String recvStr = new String(recvPacket.getData() , 0 , recvPacket.getLength()); System.out.println(“Hello World!“ + recvStr); int port = recvPacket.getPort(); InetAddress addr = recvPacket.getAddress(); String sendStr = “Hello ! I’m Server“; byte sendBuf; sendBuf = sendStr.getBytes(); DatagramPacket sendPacket = new DatagramPacket(sendBuf , sendBuf.length , addr , port ); server.send(sendPacket); server.close(); }}/** *UDPClient */import java.io.*;import java.net.*;class UDPClient{ public static void main(String args)throws IOException{ DatagramSocket client = new DatagramSocket(); String sendStr = “Hello! I’m Client“; byte sendBuf; sendBuf = sendStr.getBytes(); InetAddress addr = InetAddress.getByName(“127.0.0.1“); int port = 5050; DatagramPacket sendPacket = new DatagramPacket(sendBuf ,sendBuf.length , addr , port); client.send(sendPacket); byte recvBuf = new byte; DatagramPacket recvPacket = new DatagramPacket(recvBuf , recvBuf.length); client.receive(recvPacket); String recvStr = new String(recvPacket.getData() , 0 ,recvPacket.getLength()); System.out.println(“收到:“ + recvStr); client.close(); }}java中如何检测本机指定的UDP服务端口是否被占用并且自动分配一个可用udp端口;
1.端口占用编译器会报错,可以从错误看出来是不是端口被占用。没有专门的检测工具和方法 2.DatagramSocket(在Java中使用UDP协议编程的相关类) 用于接收和发送UDP的Socket实例。该类有3个构造函数: DatagramSocket():通常用于客户端编程,它并没有特定监听的端口,仅仅使用一个临时的。程序会让操作系统分配一个可用的端口。 DatagramSocket(int port):创建实例,并固定监听Port端口的报文。通常用于服务端DatagramSocket(int port, InetAddress localAddr):这是个非常有用的构建器,当一台机器拥有多于一个IP地址的时候,由它创建的实例仅仅接收来自LocalAddr的报文。 DatagramSocket具有的主要方法如下: 1)receive(DatagramPacket d):接收数据报文到d中。receive方法产生一个“阻塞”。“阻塞”是一个专业名词,它会产生一个内部循环,使程序暂停在这个地方,直到一个条件触发。 2)send(DatagramPacket dp):发送报文dp到目的地。 3)setSoTimeout(int timeout):设置超时时间,单位为毫秒。 4)close():关闭DatagramSocket。在应用程序退出的时候,通常会主动释放资源,关闭Socket,但是由于异常地退出可能造成资源无法回收。所以,应该在程序完成时,主动使用此方法关闭Socket,或在捕获到异常抛出后关闭Socket。 希望对您有帮助谢谢
更多文章:

结构体数组初始化赋值(定义一个结构体数组,可以在初始化里直接赋值吗比如 struct a{ int d=0; }b[1)
2025年2月13日 22:20

表格怎么设置日期格式?求一js正则表达式验证YYYY/MM/DD格式日期
2025年2月23日 13:10

comfortablely(seat什么意思 comfortable和comfortablely的词性 谢谢)
2025年3月11日 13:30

warned什么意思(词汇搭配:有关warn的几条重要搭配)
2025年4月5日 03:40

dead or alive(经典游戏双截龙主题曲DEAD OR ALIVE歌词,女歌手唱的,如果有翻译的话追加赏金!)
2025年3月17日 07:10

uptodate是什么意思(uptodate是什么意思及反义词)
2025年3月15日 22:00