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

java基础学习网络编程之UDP和TCP协议 十四 -3

2017-03-17 17:45 951 查看
UDP协议传输和接收数据:

SendDemo

package udp01;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

/**
* @author Angus
*	UDP协议发送数据步骤
*	1:创建发送端Socket对象
*	2:创建数据并打包
*	3:发送数据
*	4:释放资源
*/
public class SendDemo {
public static void main(String[] args)throws Exception {

//创建socket 对象
DatagramSocket ds = new DatagramSocket();

//创建数据
String str = "hello,UDP发送数据内容";
//DatagramPacket 数据包类
byte[] bys = str.getBytes();
int len = bys.length;

InetAddress address = InetAddress.getByName("192.168.1.160");

int port = 12306;

DatagramPacket dp = new DatagramPacket(bys, len, address, port);
//发送数据

ds.send(dp);

//释放资源
ds.close();

}
}
ReceiveDemo

package udp01;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

/**
*
* @author Angus
*UDP协议接收数据步骤
*	1:创建接口数据Socket对象
*	2:创建数据包
*	3:调用接收方法
*	4:解析数据
*	5:释放资源
*
*注意:
*	接收端口和发送端口必须一致
*/
public class ReceiveDemo {
public static void main(String[] args)throws Exception {

//创建接收对象
DatagramSocket ds = new DatagramSocket(12306);

//创建数据包
byte[] bys = new byte[1024];
int len = bys.length;
DatagramPacket dp = new DatagramPacket(bys, len);
//调用接收方法
ds.receive(dp);

//解析数据
InetAddress address = dp.getAddress();
String ip = address.getHostAddress();
byte[] bys2 = dp.getData();
int length = dp.getLength();
String s = new String(bys2,0,length);
System.out.println(ip+"----"+s);

//释放资源
ds.close();

}
}


运行后:



广播地址的概念:

InetAddress address = InetAddress.getByName("192.168.1.255");


最后修改为255后,在这个IP内存的所有用户都可以收到信息。。。。。

同样也可以new两个线程开启这样就不用两个main方法来实现了。。。。

TCP协议传输和接收数据:

ClientDemo:

package tcp01;

import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

/**
* @author Angus
*	TCP协议客户端的步骤
*	1:创建客户端的Socket对象
*	2:建立连接
*	3:获取输出流写数据
*	4:释放资源
*
*Socket:
*		此类实现客户端套接字(也可以就叫“套接字”)。套接字是两台机器间通信的端点。
*	Socket(InetAddress address, int port) 创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
*	Socket(String host, int port) 创建一个流套接字并将其连接到指定主机上的指定端口号。
*
*	运行直接报错:
*	Exception in thread "main" java.net.ConnectException: Connection refused: connect
*	所以必须先开服务器,在开客户端,UDP不限制。。。
*/
public class ClientDemo {
public static void main(String[] args) throws Exception {
//1:创建客户端的Socket对象和连接
//Socket(InetAddress address, int port)
//		Socket s = new Socket(InetAddress.getByName("192.168.1.160"), 10010);
//Socket(String host, int port)
Socket s = new Socket("192.168.1.160", 10010);
//获取输出流写数据
//getOutputStream() 返回此套接字的输出流。
OutputStream os = s.getOutputStream();

os.write("hello我来了".getBytes());

//4:释放资源
s.close();

}
}


ServerDemo

package tcp01;

import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
* @author Angus
*	TCP协议服务端对象
*	1:创建服务器Socket对象
*	2;监听连接
*	3:获取输入流,读取数据
*	4;释放资源
*
*	ServerSocket
*		此类实现服务器套接字。服务器套接字等待请求通过网络传入。它基于该请求执行某些操作,然后可能向请求者返回结果。
*
*	public Socket accept() 侦听并接受到此套接字的连接。此方法在连接传入之前一直阻塞。
*/
public class ServerDemo {

public static void main(String[] args) throws Exception{
//创建对象
ServerSocket ss = new ServerSocket(10010);

//监听
Socket socket = ss.accept();
//获取输入流
InputStream inputStream = socket.getInputStream();
byte[] bys = new byte[1024];
int len = inputStream.read(bys);
String s = new String(bys,0,len);

System.out.println(s);
//释放资源
inputStream.close();
//		ss.close();  //服务器一般不关闭,关闭了别人就无法访问了。。

}

}


先运行服务器端再运行客户端:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  UDP协议