您的位置:首页 > 理论基础 > 计算机网络

黑马程序员_温习 网络编辑二 (个人笔记)概要(UDP传输演示)

2013-12-16 22:38 666 查看
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

概要(UDP传输演示)

UDP发送端:

例:

DatagramSocket ds = new DatagramSocket(8888);//建立UDP。Socket服务端,并指定监听端口8888(不写则系统随机)

byte[] buf = "udp ge men lai le".getBytes(); //将要发的内容记录在容器中

DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.254"),10000); //建立一个包

//吧数据封装进去,括号为

|--数据

|--长度

|--指定主机

|--指定端口

ds.send(dp);//发送(通过ds服务端将dp包发送到指定主机的指定端口程序上)

ds.close();//关闭资源(占用网络资源)

UDP接收端:

DatagramSocket ds = new DatagramSocket(10000);//加你服务端,监听10000端口

byte[] buf = new byte[1024]; //建一个容器最大1024即64K

DatagramPacket dp = new DatagramPacket(but,but.length);//建包并指定容器,和要接收的长度(这个是阻塞式方法。cmd会等待)

ds.receive(dp); // 通过服务端,将数据接收到包中

String ip=dp.getAddress().getHostAddress();// 获取包中的地址

String data=new String(dp.getData(),0,dp.getLength()); //获取数据

int port = dp.getPort()//获取端口号

ds.close();//关闭

练习:UDK聊天(和QQ聊天一样,边写边收,且在一个窗口中完成)

概要:一要用多线程

二建两个模板类,一个接收,一个发送,两个都实现多线程Runnable

import java.io.*;

import java.net.*;

class send implements Runnable //建立一个发送模板,实现多线程

{

private DatagramSocket ds;

public send(DatagramSocket ds){

this.ds = ds;

}

public void run(){

try

{

BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));//键盘录入

String line = null;

while ((line = bufr.readLine())!=null)

{

if("886".equals(line))

break;

byte[] buf = line.getBytes(); //将录入内容 记录在容器中

DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.255"),10002);//建立包,指定.容器,长度,主机,端口

//频段255为广播,即所有连接都会收到信息

ds.send(dp);//发送

}

}

catch (Exception e)

{

throw new RuntimeException("发送端失败");

}

}

}

class Rece implements Runnable //建立接收模板,实现多线程

{

private DatagramSocket ds;

public Rece(DatagramSocket ds){

this.ds = ds;

}

public void run(){

try

{

byte[] buf = new byte[1024]; //建一个1024数组即64K

DatagramPacket dp = new DatagramPacket(buf,buf.length);//建包,指定 容器,和长度

ds.receive(dp); //将接收的数据,传入包中

String ip = dp.getAddress().getHostAddress(); //获取包中IP

String data = new String(dp.getData(),0,dp.getLength()); //获取包中数据。且指定长度

System.out.println(ip+"--"+data); //打印到控制台

}

catch (Exception e)

{

throw new RuntimeException("接收端失败");

}

}

}

class Demo

{

public static void main(String[] args)throws Exception

{

DatagramSocket sendsocket = new DatagramSocket(); //建立发送服务端

DatagramSocket recesocket = new DatagramSocket(10002); //建立接收服务端,指定本机监听端口100002

new Thread(new send(sendsocket)).start(); //建立多线程,传入发送模板对象,再将发送端对象出入模板对象中

new Thread(new Rece(recesocket)).start(); //建立多线程,传入接收模板对象,再将接收端对象出入模板对象中

}

}

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐