UPD: User Datagram Protocol。面向无连接,不安全。
UDP中,发送方无需知道接收方是否接受,只考虑将数据通过IP+port发送过去。
此方法简单,经济。
类:DatagramSocket: 数据通讯管道。
方法:send,receive。
类:DatagramPacket:集装箱,用于封装数据,加上目的地(IP+port)
发送方代码:
Java编程软件。后面为发送方作为接收方,接受对方的数据。通道已经建立,只需要创建集装箱对象接收通道中的数据即可。
//发送方
package UDPtest;
import java.io.IOException;
import java.net.*;public class UDPsend {public static void main(String[] args) throws IOException {DatagramSocket ds = new DatagramSocket();String str = "Hello world!";DatagramPacket dp = new DatagramPacket(str.getBytes(), str.length(), InetAddress.getByName("127.0.0.1"), 3000);System.out.println("正在发送数据!");ds.send(dp);System.out.println("数据发送完毕!");byte[] by = new byte[1024];DatagramPacket dp2 = new DatagramPacket(by, 1024);System.out.println("端口:" + dp.getPort() + "等待接受数据!");ds.receive(dp2);System.out.println("端口:" + dp.getPort() + "接收数据完毕!");String str2 = new String(dp2.getData() , 0 , dp2.getLength()) + " from " + dp2.getAddress().getHostAddress() + ": " + dp2.getPort();System.out.println(str2);}
}
接收方代码:
package UDPtest;import java.io.IOException;
import java.net.*;public class UDPreceive {public static void main(String[] args) throws IOException {DatagramSocket ds = new DatagramSocket(3000);byte[] by = new byte[1024];DatagramPacket dp = new DatagramPacket(by, 1024);System.out.println("端口3000: 等待接受数据!");ds.receive(dp);System.out.println("端口3000:已经收到数据!");String str = new String(dp.getData(), 0, dp.getLength()) + " from " + dp.getAddress().getHostAddress() + ": " + dp.getPort();System.out.println(str);String str2 = "HELLO, WORLD!";DatagramPacket dp2 = new DatagramPacket(str2.getBytes(), str2.length(), InetAddress.getByName("127.0.0.1"), dp.getPort());System.out.println("端口:" + dp.getPort() + "正在发送数据!");ds.send(dp2);System.out.println("端口:" + dp.getPort() + "发送数据完毕!");}
}
TCP:Transmission Control Protocol。面向接连的,安全。
TCP编程实现过程:
ServerSocket:服务器码头,要在某个端口上。
Socket:运输通道。
客户端需要绑定服务器的端口和地址。
客户端的输出相当于服务端的输入,反正亦然。
服务端每接待一个客户端,都会启动一个线程对应。
Java编译器?例子:
package UDPtest;//文件放在此包中。
import java.io.EOFException;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;public class TCPTest {public static void main(String[] args) throws IOException {try {ServerSocket s = new ServerSocket(8003);int i = 0; while(true) {Socket ss = s.accept();//等待通道建立。System.out.println("客人" + ++i + "来了");new Thread(new Worker(ss)).start();}}catch(EOFException e) {e.printStackTrace();}}
}//Worker代码
package UDPtest;
import java.net.*;
import java.io.*;class Worker implements Runnable {Socket s;public Worker(Socket s) {this.s = s;}public void run() {try {System.out.println("服务器已启动!");InputStream ips = s.getInputStream();OutputStream ops = s.getOutputStream();BufferedReader br = new BufferedReader(new InputStreamReader(ips));DataOutputStream dos = new DataOutputStream(ops);while (true) {String strWord = br.readLine();System.out.println(" client said:" + strWord +":" + strWord.length());if (strWord.equalsIgnoreCase("quit"))break;String strEcho = strWord + " 666";System.out.println("server said:" + strWord + "---->" + strEcho);dos.writeBytes(strWord + "---->" + strEcho + System.getProperty("line.separator"));}br.close();dos.close();s.close();} catch (Exception e) {e.printStackTrace();}}
}
客户端代码:
package UDPtest;
import java.io.IOException;
import java.net.*;
import java.io.*;public class Client {public static void main(String[] args) throws UnknownHostException, IOException {Socket s = new Socket(InetAddress.getByName("127.0.0.1"), 8003);InputStream ips = s.getInputStream();OutputStream ops = s.getOutputStream();BufferedReader brNet = new BufferedReader(new InputStreamReader(ips));DataOutputStream dos = new DataOutputStream(ops);BufferedReader brKey = new BufferedReader(new InputStreamReader(System.in));while(true) {String word = brKey.readLine();if(word.equalsIgnoreCase("exit"))break;else {System.out.println("I wanna send" + word);//写给服务器数据dos.writeBytes(word + System.getProperty("line.separator"));//读取服务器的数据System.out.println("Server said:" + brNet.readLine()); }}}
}
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态