网络编程-UDP协议---简单聊天室程序
2013-12-15 17:13
721 查看
Udp发送端的步骤:
1, 创建发送端
DatagramSocket ds=new DatagramSocket();
2, 创建发送端数据包
String str=”我的发送端的数据”
Byte[] buf=str.getBytes();
DatagramPacket dp=new DatagramPacket(buf,0,buf.length,InetAddress.getByName(“localhost”),8888);
3, 发送数据
Ds.send(dp);
4, 关闭发送端
Ds.close();
Udp接收端的步骤:
1, 创建接收端
DatagramSocket ds=new DatagramSocket(8888);
2, 创建接收端数据包
Byte[] buf=new byte[1024];
DatagramPacket dp=new DatagramPacket(buf,buf.length);
3, 接收数据
Ds.receive(dp);
4, 处理接收到的数据(解析)
String ip=dp.getAddress().getHostAddress();
Int port=dp.getPort();
String str=new String(dp.getData(),0,dp.getLength());
5, 关闭接收端
Ds.close();
发送端:
接收端:
主程序:
DatagramSocket:
提供的常用方法:
DatagramPacket:
常用方法:
1, 创建发送端
DatagramSocket ds=new DatagramSocket();
2, 创建发送端数据包
String str=”我的发送端的数据”
Byte[] buf=str.getBytes();
DatagramPacket dp=new DatagramPacket(buf,0,buf.length,InetAddress.getByName(“localhost”),8888);
3, 发送数据
Ds.send(dp);
4, 关闭发送端
Ds.close();
Udp接收端的步骤:
1, 创建接收端
DatagramSocket ds=new DatagramSocket(8888);
2, 创建接收端数据包
Byte[] buf=new byte[1024];
DatagramPacket dp=new DatagramPacket(buf,buf.length);
3, 接收数据
Ds.receive(dp);
4, 处理接收到的数据(解析)
String ip=dp.getAddress().getHostAddress();
Int port=dp.getPort();
String str=new String(dp.getData(),0,dp.getLength());
5, 关闭接收端
Ds.close();
发送端:
package cn.itheima.cway.chatrom; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; /** * 发送端 * * @author 超哥 * */ class Send implements Runnable { private DatagramSocket ds=null; public Send(DatagramSocket ds) { this.ds = ds; } public void run() { //接收一个键盘输入 BufferedReader sen = new BufferedReader(new InputStreamReader( System.in)); //定义一个接收键盘输入的字符串暂存 String buf=null; try { while ((buf = sen.readLine()) != null) { // 键盘输入转换为byte数组 byte[] buff=buf.getBytes(); //创建一个发送数据包 DatagramPacket dp = new DatagramPacket(buff,buff.length, InetAddress.getByName("192.168.0.255"),10001); //发送数据 ds.send(dp); //如果数据包含over则退出 if(buff.equals("over")) break; //ds.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
接收端:
package cn.itheima.cway.chatrom; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; /** * 接收端 * @author 超哥 * */ class Rece implements Runnable{ private DatagramSocket ds=null; public Rece(DatagramSocket ds) { this.ds=ds; } public void run() { while(true) { //创建一个结束数据的字节数组缓存 byte[] buf=new byte[1024]; //创建接收数据包对象 DatagramPacket dp=new DatagramPacket(buf,buf.length); try { //接收数据 ds.receive(dp); //获取数据中的ip地址 String ip=dp.getAddress().getHostAddress(); //接收数据中的端口号 int port=dp.getPort(); //接收数据内容 String text=new String(dp.getData(),0,dp.getLength()); System.out.println(ip+"-"+port+":\t"+text); } catch (IOException e) { e.printStackTrace(); } } } }
主程序:
package cn.itheima.cway.chatrom; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; public class ChatRom { /** * 聊天室 需求:使用UDP协议完成一个简单的聊天室功能,如果用户输入over则退出 * @throws SocketException * */ public static void main(String[] args) throws SocketException { new Thread(new Send(new DatagramSocket())).start(); new Thread(new Rece(new DatagramSocket(10001))).start(); } }
DatagramSocket:
构造方法摘要 | |
---|---|
DatagramSocket() 构造数据报套接字并将其绑定到本地主机上任何可用的端口。 | |
protected | DatagramSocket(DatagramSocketImpl impl) 创建带有指定 DatagramSocketImpl 的未绑定数据报套接字。 |
DatagramSocket(int port) 创建数据报套接字并将其绑定到本地主机上的指定端口。 | |
DatagramSocket(int port,InetAddress laddr) 创建数据报套接字,将其绑定到指定的本地地址。 | |
DatagramSocket(SocketAddress bindaddr) 创建数据报套接字,将其绑定到指定的本地套接字地址。 |
void | receive(DatagramPacket p) 从此套接字接收数据报包。 |
void | send(DatagramPacket p) 从此套接字发送数据报包。 |
构造方法摘要 |
---|
DatagramPacket(byte[] buf, int length) 构造 DatagramPacket,用来接收长度为 length的数据包。 |
DatagramPacket(byte[] buf, int length,InetAddress address, int port) 构造数据报包,用来将长度为 length的包发送到指定主机上的指定端口号。 |
DatagramPacket(byte[] buf, int offset, int length) 构造 DatagramPacket,用来接收长度为 length的包,在缓冲区中指定了偏移量。 |
DatagramPacket(byte[] buf, int offset, int length,InetAddress address, int port) 构造数据报包,用来将长度为 length偏移量为 offset的包发送到指定主机上的指定端口号。 |
DatagramPacket(byte[] buf, int offset, int length,SocketAddress address) 构造数据报包,用来将长度为 length偏移量为 offset的包发送到指定主机上的指定端口号。 |
DatagramPacket(byte[] buf, int length,SocketAddress address) 构造数据报包,用来将长度为 length的包发送到指定主机上的指定端口号。 |
InetAddress | getAddress() 返回某台机器的 IP 地址,此数据报将要发往该机器或者是从该机器接收到的。 |
byte[] | getData() 返回数据缓冲区。 |
int | getLength() 返回将要发送或接收到的数据的长度。 |
int | getOffset() 返回将要发送或接收到的数据的偏移量。 |
int | getPort() 返回某台远程主机的端口号,此数据报将要发往该主机或者是从该主机接收到的。 |
SocketAddress | getSocketAddress() 获取要将此包发送到的或发出此数据报的远程主机的 SocketAddress(通常为 IP 地址 + 端口号)。 |
相关文章推荐
- Java网络编程 - 基于UDP协议 实现简单的聊天室程序
- 【Java网络编程】UDP协议实例——简单的在线聊天程序
- 【Unix 网络编程】UDP 客户/服务器简单 Socket 程序
- 网络编程学习笔记(二)UDP协议及聊天小程序的实现
- linux网络编程之socket(十四):基于UDP协议的网络程序
- 网络编程(学习整理)---2--(Udp)实现简单的控制台聊天室
- Java网络编程(UDP协议-聊天程序)
- 网络编程应用:基于UDP协议【实现聊天程序】--练习
- 网络编程之即时通信程序(聊天室)------(一)通信流程简介及通信协议定制
- java 网络编程之UDP通信和简单的群聊程序
- 网络编程与多线程的应用--基于socket udp编写一个简单聊天程序
- linux网络编程之socket(十四):基于UDP协议的网络程序
- 26-网络编程-09-网络编程(UDP协议-聊天程序)
- 网络编程之即时通信程序(聊天室)------(一)通信流程简介及通信协议定制
- 网络编程初探--使用UDP协议的简易聊天室
- linux网络编程之socket(十四):基于UDP协议的网络程序
- 网络编程之UDP简单回射程序
- 黑马程序员_Java基础_网络编程_UDP传输协议编程,控制台聊天程序
- linux网络编程之socket(十四):基于UDP协议的网络程序
- {网络编程}和{多线程}应用:基于UDP协议【实现多发送方发送数据到同一个接收者】--练习