黑马程序员技术交流社区
标题:
UDP和TCP总结
[打印本页]
作者:
xiaoxinxin003
时间:
2015-7-9 02:35
标题:
UDP和TCP总结
使用UDP建立接收和发送端
重点在于掌握UDP的接收端和发送端的建立流程。
定义UDP发送端步骤:
1.建立udpsocket服务。
2.提供数据并将数据封装到数据包中。
3.通过socket服务的发送功能将数据包发送出去。
4.关闭资源。
定义UDP接收端步骤:
定义UDP接收端
1.定义udpsocket服务。通常会监听一个端口,其实就是给这个接收网络
应用程序定义一个数字标识,方便明确哪些数据过来
该应用程序可以处理
2.定义一个数据包,因为要存储接收到的字节数据,因为数据包对象中
3.通过socket服务的receive方法将受到的数据存入已经定义好的数据包中
4.通过数据包对象的特有功能,将这些不同的数据取出,打印在控制台。
5.关闭资源。
代码实例:UDP发送端
import java.net.*;
class UdpSend
{
public static void main(String[] args) throws Exception
{
//创建udp服务。通过DatagramSocket对象
DatagramSocket ds=new DatagramSocket();
//2.确定数据,并封装成数据包。
byte[] buf="ge men lai le".getBytes();
DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.0.102"),123);
//3.通过socket服务将已有的数据包发送出去。通过send方法
ds.send(dp);
//4.关闭资源。
ds.close();
}
}
复制代码
代码实例:UDP接收端
class UdpRec
{
public static void main(String[] args) throws Exception
{
//1.创建udp socket。建立端点
DatagramSocket ds=new DatagramSocket(123);
while(true)
{
//2.定义数据包。用于存储数据。
byte[] buf=new byte[1024];
DatagramPacket dp=new DatagramPacket(buf,buf.length);
//3.通过服务的receive方法将收到的数据存到数据包中
ds.receive(dp);
//4.通过数据包的方法获取其中数据
String ip=dp.getAddress().getHostAddress();
String data=new String(dp.getData(),0,dp.getLength());
int port=dp.getPort();
System.out.println(ip+":::"+data+":::"+port);
//5.关闭资源
//ds.close();
}
}
}
复制代码
TCP传输
TCP分为客户端和服务端,客户端对应的对象时Socket,
服务端对应的对象时ServerSocket.
客户端:
在建立Socket对象时就可以去连接指定主机。
因为TCP是面向连接的。所以在建立Socket服务时。
就要有服务端存在。并连接成功。形成通路
在该同道中进行数据传输。
客户端步骤:
1.创建Socket服务。并制定要连接的主机和端口。
2.为了发送数据。应该获取socket流中的输出流。
3.将数据写入到获取的输出流中
4.关闭资源
服务端:
1.建立服务端的socket服务。ServerSocket();
并监听一个端口
2.获取链接过来的客户端对象。
通过ServerSocket的accept方法。这个方法
是阻塞式的。
3.客户端发过来数据。服务端使用对应的客户端对象
并获取到该客户端的读取流。
并打印在控制台。
4.关闭服务端(可选)
客户端示例代码:带反馈信息
class TcpClient
{
public static void main(String[] args)throws Exception{
//建立客户端服务,制定主机和端口号
Socket s = new Socket("192.168.0.102",10001);
//获取输出流
OutputStream out = s.getOutputStream();
//将数据写入到获取的输出流中
out.write("Tcp Demo".getBytes());
//获取读取流,用来接收服务端返回信息
InputStream in=s.getInputStream();
//创建缓冲区,读取服务端信息并打印
byte[] buf=new byte[1024];
int len=in.read(buf);
System.out.println(new String(buf,0,len));
//关闭资源
s.close();
}
}
复制代码
服务端示例代码:接收成功给客户端返回信息
class TcpServer
{
public static void main(String[] args)throws Exception{
//建立服务端,监听端口号。
ServerSocket ss = new ServerSocket(10001);
//接收链接过来的客户端对象
String s = ss.accept();
//获取一下客户端IP并打印
String ip = s.getInetAddress().getHostAddress();
System.out.println(ip+"*****connect");
//使用对应的客户端获取该客户端的读取流
InputStream in = s.getInputStream();
byte[] buf = new byte[1024];
//读取客户端数据并打印。
int len = in.read(buf);
System.out.println(new String(buf,0,len));
//获得输出流,用来给客户端返回信息
OutputStream out=s.getOutputStream();
//将需要反馈的信息写入到输出流
out.write("Server Accepted Data ok!".getBytes());
//关闭资源
s.close();
//ss.close();
}
}
复制代码
作者:
吃荷包蛋
时间:
2015-7-9 09:52
正好碰到一道这样的题
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2