Java简单实现UDP和TCP的示例
程序员文章站
2023-12-21 19:09:10
tcp实现
tcp协议需要在双方之间建立连接,通过输入输出流来进行数据的交换,建立需要通过三次握手,断开需要四次挥手,保证了数据的完整性,但传输效率也会相应的降低。...
tcp实现
tcp协议需要在双方之间建立连接,通过输入输出流来进行数据的交换,建立需要通过三次握手,断开需要四次挥手,保证了数据的完整性,但传输效率也会相应的降低。
简单的tcp实现
//服务端 public class tcpserver { public static void main(string[] args) throws ioexception { serversocket serversocket = new serversocket(8886); // 建立服务端,ip为本机ip,端口为8886 socket accept = serversocket.accept(); // 监听客户端的连接,一旦有客户端连接,则会返回客户端对应的accept inputstream in = accept.getinputstream(); //获取到客户端的输出流 byte b[] = new byte[1024]; int len = in.read(b); system.out.println("接受到客户端数据,返回数据"+new string(b,0,len)); outputstream out = accept.getoutputstream(); // 给客户端发送消息 out.write("服务端已经接受".getbytes()); serversocket.close(); } } // 客户端 public class tcpclient { public static void main(string[] args) throws ioexception { socket socket = new socket("127.0.0.1", 8886); // 通过socket来建立和服务端的连接 outputstream out = socket.getoutputstream(); // 获取输出流(客户端输出流即向服务端输出信息) out.write("hello tcp server".getbytes()); // 输出信息 inputstream in = socket.getinputstream(); // 接受服务端的消息 byte b[] = new byte[1024]; int len = in.read(b); system.out.println("接受到服务器消息 : "+new string(b,0,len)); // 输出 out.write("返回的的数据已经收到 ".getbytes()); // 向服务器返回消息 socket.close(); } }
改进服务端,启用多线程来接受客户端的数据
// server public static void main(string[] args) throws ioexception { serversocket serversocket = new serversocket(8886); // 建立服务端,ip为本机ip,端口为8886 int i=4; while(i>2){ socket accept = serversocket.accept(); // 监听客户端的连接,一旦有客户端连接,则会返回客户端对应的accept serverthread st = new serverthread(accept); // 启动线程 thread th = new thread(st); th.start(); } serversocket.close(); } // thread public class serverthread implements runnable { private socket accept; public serverthread(socket s) { this.accept = s; } public void run(){ inputstream in; try { in = accept.getinputstream(); byte b[] = new byte[1024]; int len = in.read(b); system.out.println("接受到客户端数据,返回数据" + new string(b, 0, len)); outputstream out = accept.getoutputstream(); // 给客户端发送消息 out.write("服务端已经接受".getbytes()); } catch (ioexception e) { e.printstacktrace(); } } }
传递图片
// 服务端 public class server { public static void main(string[] args) throws ioexception { serversocket serversocket = new serversocket(5555); socket ss = serversocket.accept(); bufferedinputstream br = new bufferedinputstream(ss.getinputstream()); bufferedoutputstream bw = new bufferedoutputstream(new fileoutputstream("copy.jpg")); // 写出文件流 byte b[] = new byte[1024]; int len = 0; while ((len = br.read(b)) != -1) { // 写出文件 bw.write(b, 0, len); bw.flush(); // 别忘了刷新,要不然最后一块缓冲区字符串会缺失 } bufferedwriter bw2 = new bufferedwriter(new outputstreamwriter(ss.getoutputstream())); // 输出 bw2.write("图片传输成功"); bw2.flush(); bw.close(); ss.close(); } } // 客户端 public class client { public static void main(string[] args) throws unknownhostexception, ioexception { socket socket = new socket("127.0.0.1", 5555); bufferedinputstream in = new bufferedinputstream(new fileinputstream("c.jpg")); bufferedoutputstream out = new bufferedoutputstream(socket.getoutputstream()); byte b[] = new byte[1024]; int len = 0; while ((len = in.read(b)) != -1) { out.write(b, 0, len); out.flush(); // 刷新缓冲区 要不然最后一块缓冲区字符串会缺失 } socket.shutdownoutput(); // 关闭流以后server段才会接收道结束字符结束接受 bufferedreader br = new bufferedreader(new inputstreamreader(socket.getinputstream())); string line; while ((line = br.readline()) != null) { system.out.println(line); } in.close(); socket.close(); } }
udp实现
udp是将数据打成数据包向对方发送,只关系是否发送成功,而不关心是否接收成功,传输速度快,但是可靠性低。
udp代码实现
// 发送端 public class senddemo { public static void main(string[] args) throws ioexception { datagramsocket ds = new datagramsocket(); // 此类表示用来发送和接收数据报包的套接字。 bufferedreader br = new bufferedreader(new inputstreamreader(system.in)); // 键盘输入 string line = null; while ((line = br.readline()) != null) { byte[] bytes = line.getbytes(); datagrampacket dp = new datagrampacket(bytes, bytes.length, inetaddress.getbyname("127.0.0.1"), 10005); // 数据包对象 ds.send(dp); if ("886".equals(line)) { // 当输入886时结束发送 break; } } ds.close(); } } // 接收端 public class recivedemo { public static void main(string[] args) throws ioexception { datagramsocket ds = new datagramsocket(10005); // 建立服务端 byte bytes[] = new byte[1024]; datagrampacket dp = new datagrampacket(bytes, bytes.length); // 建立数据包对象 while (true) { ds.receive(dp); // 接受数据包 byte[] data = dp.getdata(); // 获取数据 string str = new string(data, 0, dp.getlength()); if ("886".equals(str)) { break; } system.out.println(str); } ds.close(); } }
以上这篇java简单实现udp和tcp的示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。