socket网络编程

协议-TCP-UDP

tcp:传输控制协议 TRansmission Conrtol protocol。

特点:面向连接的,可靠的,全双工的,字节流协议。面向连接的:先建立连接然后再进行数据的手法。可靠的:数据传输的过程中,有很多进行数据丢失检测的机制。全双工:接数据的同事可以发送数据。

三次握手:简历连接的过程 A-->B:A给B发送连接请求,B回复,A连接。

四次挥手:A与B断开:A队B断开请求,B开始对检测的数据检查。确认后对A发送输出,然后A断开。

TCP,可以保证数据是安全可靠的传输,效率低,消耗资源,会传输多余信息。

udp:用户数据协议 user datagrame protocol

特点:面向无连接,不可靠的,用户数据报协议。

比喻成寄快递,将数据和需要发送的地址+端口号 打成一个数据报,一起扔到网络中,根据地址,传输到指定的接受的地方。优点是效率高。数据包最大只能发送64K。

socket编程

在发送端有一个socket对象,用来发送消息,在接受端也需要一个对应的socket对象,进行接受消息。接受端也可以使用接受信息的socket对象发送消息,发送方也可以使用同一个socket对象接受消息。

使用UDP协议进行socket通信:    DatagramSocket:用来手法消息的socket对象。                                                                                          DatagramPacket:数据包对象。

使用tcp协议:面向连接的,安全的,可靠的,字节流协议。

socket:用来收发消息的socket对象。

ServerSocket:提供服务,创建连接的服务。

UDPsocket编程代码:

//发送数据的对象,若发送方不写端口号,那么系统会默认分配一个。
DatagramSocket ds = new DatagramSocket(CLIENT_PORT);
//将需要发送的数据转换成字节数组。通过io发送
String str = "时光太长";
byte[] buf = str.getBytes();
//对需要发送的数据打包
DatagramPacket dp = new DatagramPacket(buf,buf.length,ip地址,端口号);
//发送数据
ds.send(dp);

//接收数据,创建接受的对象,创建数据包
DatagramSocket ds = new DatagramSocket(SERVER_PORT);
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf,buf.length);
//接收数据       阻塞方式
int length = dp.getLength();
String str = new String (dp.getData(),0,length);

//或者可以使用io流对数据封装。
ByteArrayOutputStream baos = new ByreArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
dos.writeBoolean(true);
dos.close();
buf = baos.toByteArray();
//将字节数组欢还原时。
ds.receive(dp);
ByteArrayInputStream bais = new ByteArrayInputStream(dp.getData(),0,dp.getLength());
DataInputStream dis = new DataInputStream(bais);
dis.readBoolean());

TCPsocket编程代码:

//创建连接的服务
ServerSocket ss = new ServerSocket(SERVER_PORT);
//accept阻塞方法,在服务器端监听的服务,监听是否有socket的连接请求,当请求来临,创建socket对象
Socket socket = ss.accept();
//创建io流对象,接受数据
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String str = br.redLine();
//发送消息
Socket socket = new Socket("ip",SERVER_PORT);
OutputStream os = socket.getOutputStream();
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
String str = "时光太长";
bw.writer(str);
bw.newLine();
bw.flush();

//写到finally中、
dos.close();
br.close();
socket.close();
ss.close();
dis.close()
bw.close();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值