------- android培训、java培训、期待与您交流! ----------
网络编程
当网络上的两台主机间需要实现数据交换时,即使用网络编程来解决问题。
有两种方式:
UDP协议方式
特点:效率高,不能保证可靠性。
//建立发送端
DatagramSocket ds = new DatagramSocket();
//将系统输入包装转换成字符流
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//读取数据
String s =null;
while((s=br.readLine())!=null){
if("over".equals(s)){
byte[] bye = s.getBytes();
break;
}
byte[] bye = s.getBytes();
//把得到的数据打包成数据包
DatagramPacket dp = new DatagramPacket(bye,bye.length,InetAddress.getByName("PANERLEADER-PC"),123123);
//把数据包发送出去
ds.send(dp);
}
//关闭资源
ds.close();
br.close();
以上是发送端的代码,实现将标准系统输入(键盘)的数据发送到接收端的标准系统输出上显示。
DatagramSocket ds = new DatagramSocket(123123);
//建立一个给定容量的数据包
while(true){
byte[] buf =new byte[1024];
DatagramPacket dp = new DatagramPacket(buf,buf.length);
//将数据包接收进来
ds.receive(dp);
//解析数据包中的地址
String ip = dp.getAddress().getHostAddress();
//解析数据包中的数组接收的内容
String text = new String(buf,0,dp.getLength());
//显示到控制台上
System.out.println(ip+"***"+text);
接收端建立连接,接收数据包,解析包,然后输出到控制台上。
TCP协议方式
特点:可靠性高。
TCP与UDP相比,需要确认已建立连接,再进行数据交换,完成交换后需要断开连接。
// 建立到服务器端的连接
Socket s = new Socket("192.168.1.5", 10000);
// 获取标准系统输入(键盘)并将其包装成字符流
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 建立到服务器端的输出流(字节流)
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
s.getOutputStream()));
// 建立输入流
BufferedReader brServer = new BufferedReader(new InputStreamReader(
s.getInputStream()));
// 将键盘的输入读到line中
String line = null;
while ((line = br.readLine()) != null) {
// 设置结束条件
if ("over".equals(line)) {
break;
}
// 写到输出流中
bw.write(line + "\r\n");
bw.flush();
// 将服务端的输出显示到屏幕上
String serverText = brServer.readLine();
System.out.println("server:" + serverText);
}
//释放资源
br.close();
s.close();
客户端将键盘输入的字符发送到服务器端,并将服务器端返回的数据输出到控制台上。
// 建立服务器端对象ss
ServerSocket ss = new ServerSocket(10000);
// 通过ss获得客户端对象
Socket s = ss.accept();
// 获得改客户端的流
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
// 逐行读取流
String line = null;
while ((line = br.readLine()) != null) {
// 打印到控制台上上
System.out.println(line);
// 将其变为小些并写到输出流中
bw.write(line.toLowerCase()+"\r\n");
bw.flush();
}
// 释放资源
ss.close();
服务器端将客户端的数据转成小写后返回给客户端。