网络编程 UDP入门及无限聊天
2017-06-28 22:32
344 查看
UDP:发送端send ——DatagramSocket 对象
4000
接受端receive——DatagramSocket 对象
import java.io.BufferedReader;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
import collection.InputStreamReader;
/**
* udp的发送端
* @author Administrator
* 1:建立udp的socket服务
2:将要发送的数据封装成数据包
3:通过udp的socket服务,将数据包发送出
4:关闭资源
*/
public class UDPsend {
/**
* DatagramSocket socket对象
* 构造
* DatagramSocket() 构造数据报套接字并将其绑定到本地主机上任何可用的端口。
DatagramSocket(int port) 创建数据报套接字并将其绑定到本地主机上的指定端口。
方法:
public void send(DatagramPacket p);发送数据包,参数类型为:DatagramPacket
DatagramPacket数据包对象
构造 DatagramPacket(byte[] buf, int length, InetAddress address, int port)
需要发送的数据, 发送的数据长度, 接收端ip对象, 接收端的端口号
构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。
* @throws IOException
*/
public static void main(String[] args) throws IOException{
//1创建socket服务
DatagramSocket ds=new DatagramSocket(2000);
//2封装数据(打包)
byte[] data="哈哈朋友您们好e ij e ij".getBytes();
InetAddress ip=InetAddress.getByName("172.16.0.162");
DatagramPacket dp=new DatagramPacket(data,data.length,ip,10000);
//3通过DatagramSocket对象的方法发送封装好的数据
ds.send(dp);
// 4关闭资源
ds.close();
}
}
/**
* udp的接收端
* @author Administrator
*
*/
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
public class UDPRecive {
/**构造:
* DatagramSocket(int port) ;//创建DatagramSocket接收端的对象,指定端口号
*
* 方法:
* void receive(DatagramPacket p) 从此套接字接收数据报包 ,参数类型:数据包的对象DatagramPacket
*
* DatagramPacket
* 构造
* DatagramPacket(byte[] buf, int length) 用来接收长度为 length 的数据包。
* 方法
* int getLength() 返回将要发送或接收到的数据的长度。
* InetAddress getAddress() 返回某台机器的 IP 地址,此数据报将要发往该机器或者是从该机器接收到的。
* int getPort() ; 返回某台远程主机的端口号,此数据报将要发往该主机或者是从该主机接收到的。
* @param args
* @throws IOException
*/
public static void main(String[] arags) throws IOException{
//创建接受端DatagramSocket 的对象,指定端口
DatagramSocket ds=new DatagramSocket(10000);
//创建DatagramPacket接受数据包对象
byte[] buf=new byte[1024];
DatagramPacket dp=new DatagramPacket(buf,buf.length);
//创建Socket对象的receive方法,接受数据包
ds.receive(dp);
//拆包
int length=dp.getLength();
InetAddress ip=dp.getAddress();
int port=dp.getPort();
System.out.println("发送端的ip对象"+ip+" 端口号"+port);
System.out.println("数据"+new String(buf,0,length));
//关闭资源
ds.close();
}
}
UDP实现无限聊天
/*
* 实现UDP协议 发送端
* 1. 创建数据包对象,封装数据,IP,端口号 DatagramPacket
* 2. 创建数据包Socket投递对象 DatagramSocket
* 3. 投递对象方法send发生数据包
* 4. 关闭资源
*
* 要求: 发送的数据,必须是键盘输入来的(禁止使用Scanner)
* System.in+转换流+缓冲区readerLine
* 输入一行,发送一行 循环,死循环
*/
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 UDPchatSend{
public static void main(String[] args) throws IOException{
//创建Socket服务
DatagramSocket ds=new DatagramSocket(10890);
//键盘录入
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String line=null;
while((line=br.readLine())!=null){
//创建数据包对象,封装数据,IP,端口号,datagramSocket
byte[] by=line.getBytes();
InetAddress ip=InetAddress.getByName("172.16.0.162");
DatagramPacket dp=new DatagramPacket(by,by.length,ip,20000);
//发送对象方法send发送数据包
ds.send(dp);
if("886".equals(line)){
break;
}
}
//关闭资源
ds.close();
}
}
/*
* UDP的接收端
* 1. 创建接收对象DatagramSocket , 传递端口
* 2. 创建数据包对象DatagramPacket, 接收字节数组
* 3. 接收对象DatagramSocket方法 receive接收数据包--线程阻塞效果,等着接收,如果没有发送,永久等待
* 4. 使用DatagramPacket方法,进行拆包
* 5. 关闭资源
*/
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
public class UDPreceiveChat {
public static void main(String[] args) throws IOException{
//1创建接受端指定的DatagramSocket的对象,指定端口号
DatagramSocket ds=new DatagramSocket(10000);
//2创建DatagramPacket接受数据包对象
byte[] bu=new byte[1024];
while(true){
DatagramPacket dp=new DatagramPacket(bu,bu.length);
//3通过Socket对象的receive方法,接受数据包
ds.receive(dp);
//4拆包
int length=dp.getLength();//获取真实接受的数据的长度
int port=dp.getPort();//获取真实的端口
String ip=dp.getAddress() .getHostAddress();//获取真实ip地址
String message=new String(bu,0,length);
if("886".equals(message)){
System.out.println(".."+ip+" "+port+"下线");
break;
}else{
System.out.println(message+".."+port+".."+ip);
}
}
//关闭资源
ds.close();
}
}
4000
接受端receive——DatagramSocket 对象
import java.io.BufferedReader;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
import collection.InputStreamReader;
/**
* udp的发送端
* @author Administrator
* 1:建立udp的socket服务
2:将要发送的数据封装成数据包
3:通过udp的socket服务,将数据包发送出
4:关闭资源
*/
public class UDPsend {
/**
* DatagramSocket socket对象
* 构造
* DatagramSocket() 构造数据报套接字并将其绑定到本地主机上任何可用的端口。
DatagramSocket(int port) 创建数据报套接字并将其绑定到本地主机上的指定端口。
方法:
public void send(DatagramPacket p);发送数据包,参数类型为:DatagramPacket
DatagramPacket数据包对象
构造 DatagramPacket(byte[] buf, int length, InetAddress address, int port)
需要发送的数据, 发送的数据长度, 接收端ip对象, 接收端的端口号
构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。
* @throws IOException
*/
public static void main(String[] args) throws IOException{
//1创建socket服务
DatagramSocket ds=new DatagramSocket(2000);
//2封装数据(打包)
byte[] data="哈哈朋友您们好e ij e ij".getBytes();
InetAddress ip=InetAddress.getByName("172.16.0.162");
DatagramPacket dp=new DatagramPacket(data,data.length,ip,10000);
//3通过DatagramSocket对象的方法发送封装好的数据
ds.send(dp);
// 4关闭资源
ds.close();
}
}
/**
* udp的接收端
* @author Administrator
*
*/
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
public class UDPRecive {
/**构造:
* DatagramSocket(int port) ;//创建DatagramSocket接收端的对象,指定端口号
*
* 方法:
* void receive(DatagramPacket p) 从此套接字接收数据报包 ,参数类型:数据包的对象DatagramPacket
*
* DatagramPacket
* 构造
* DatagramPacket(byte[] buf, int length) 用来接收长度为 length 的数据包。
* 方法
* int getLength() 返回将要发送或接收到的数据的长度。
* InetAddress getAddress() 返回某台机器的 IP 地址,此数据报将要发往该机器或者是从该机器接收到的。
* int getPort() ; 返回某台远程主机的端口号,此数据报将要发往该主机或者是从该主机接收到的。
* @param args
* @throws IOException
*/
public static void main(String[] arags) throws IOException{
//创建接受端DatagramSocket 的对象,指定端口
DatagramSocket ds=new DatagramSocket(10000);
//创建DatagramPacket接受数据包对象
byte[] buf=new byte[1024];
DatagramPacket dp=new DatagramPacket(buf,buf.length);
//创建Socket对象的receive方法,接受数据包
ds.receive(dp);
//拆包
int length=dp.getLength();
InetAddress ip=dp.getAddress();
int port=dp.getPort();
System.out.println("发送端的ip对象"+ip+" 端口号"+port);
System.out.println("数据"+new String(buf,0,length));
//关闭资源
ds.close();
}
}
UDP实现无限聊天
/*
* 实现UDP协议 发送端
* 1. 创建数据包对象,封装数据,IP,端口号 DatagramPacket
* 2. 创建数据包Socket投递对象 DatagramSocket
* 3. 投递对象方法send发生数据包
* 4. 关闭资源
*
* 要求: 发送的数据,必须是键盘输入来的(禁止使用Scanner)
* System.in+转换流+缓冲区readerLine
* 输入一行,发送一行 循环,死循环
*/
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 UDPchatSend{
public static void main(String[] args) throws IOException{
//创建Socket服务
DatagramSocket ds=new DatagramSocket(10890);
//键盘录入
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String line=null;
while((line=br.readLine())!=null){
//创建数据包对象,封装数据,IP,端口号,datagramSocket
byte[] by=line.getBytes();
InetAddress ip=InetAddress.getByName("172.16.0.162");
DatagramPacket dp=new DatagramPacket(by,by.length,ip,20000);
//发送对象方法send发送数据包
ds.send(dp);
if("886".equals(line)){
break;
}
}
//关闭资源
ds.close();
}
}
/*
* UDP的接收端
* 1. 创建接收对象DatagramSocket , 传递端口
* 2. 创建数据包对象DatagramPacket, 接收字节数组
* 3. 接收对象DatagramSocket方法 receive接收数据包--线程阻塞效果,等着接收,如果没有发送,永久等待
* 4. 使用DatagramPacket方法,进行拆包
* 5. 关闭资源
*/
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
public class UDPreceiveChat {
public static void main(String[] args) throws IOException{
//1创建接受端指定的DatagramSocket的对象,指定端口号
DatagramSocket ds=new DatagramSocket(10000);
//2创建DatagramPacket接受数据包对象
byte[] bu=new byte[1024];
while(true){
DatagramPacket dp=new DatagramPacket(bu,bu.length);
//3通过Socket对象的receive方法,接受数据包
ds.receive(dp);
//4拆包
int length=dp.getLength();//获取真实接受的数据的长度
int port=dp.getPort();//获取真实的端口
String ip=dp.getAddress() .getHostAddress();//获取真实ip地址
String message=new String(bu,0,length);
if("886".equals(message)){
System.out.println(".."+ip+" "+port+"下线");
break;
}else{
System.out.println(message+".."+port+".."+ip);
}
}
//关闭资源
ds.close();
}
}
相关文章推荐
- java 网络编程二 UDP传输协议(例:2个进程进行聊天)
- Android开发菜鸟级入门4--网络编程之套接字UDP
- JAVA网络编程基础-1-快速网络编程入门-聊天服务器实现
- 网络编程UDP模仿QQ聊天功能
- 网络编程与多线程的应用--基于socket udp编写一个简单聊天程序
- Java 网络编程之 (UDP网络聊天程序)
- 网络编程-UDP程序聊天小程序
- TCP UDP之网络编程及数据库入门
- VC++之网络编程五 聊天编程实例(UDP)
- 【Java网络编程】UDP协议实例——简单的在线聊天程序
- socket 网络编程快速入门(一)教你编写基于UDP/TCP的服务(客户端)通信
- java网络编程____UDP入门小demo
- java 网络编程【6】 用UDP编写网络聊天程序 以及 TCP编程实例
- Java_乔晓松_Java网络编程UDP实现黑窗口聊天
- socket 网络编程高速入门(一)教你编写基于UDP/TCP的服务(client)通信
- Linux下C语言编程入门-15关于网络编程(2)UDP
- 网络编程——UDP聊天窗口
- 网络编程UDP协议——聊天软件
- JAVA 网络编程 UDP(聊天程序)
- Delphi-网络编程-第一个网络方面作品(UDP聊天程序)