Java Socket编程 Tcp/Udp

*Socket套接字用于描述计算机ip地址和端口
 * 通信链的句柄,用户各种计算机和虚拟机之间的
 * 通信,所有应用程序几乎都用socket

我们先看Tcp通信范例:
服务端:
package review.socketTcpOrUdp;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerTcp {

       publicstatic void main(String[] args) {
             try {
                   ServerSocketserverSocket = new ServerSocket(9527);
                   Socketsocket =serverSocket.accept();
                  InputStreamReader inputStreamReader = newInputStreamReader(socket.getInputStream());
                  BufferedReader bufferedReader = newBufferedReader(inputStreamReader);
                  //将数据写入socket通道并推出去
                   PrintWriterprintWriter = new PrintWriter(socket.getOutputStream());
                  while(true){
                   StringclientStr = bufferedReader.readLine();
                  printWriter.println("Server"+clientStr);
                  printWriter.flush();
                  if(clientStr.equals("exit")){
                          break;
                   }
                   }
                  serverSocket.close();
             } catch(IOException e) {
                  e.printStackTrace();
             }

       }

}

客户端:
package review.socketTcpOrUdp;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class ClientTcp {

       publicstatic void main(String[] args) {
             try {
                   SocketclientSocket = new Socket("127.0.0.1", 9527);
                   //读取控制台输入的数据
                  InputStreamReader inputStreamReader = newInputStreamReader(System.in);
                  BufferedReader bufferedReader = newBufferedReader(inputStreamReader);
                   //将读出来的程序写入socket通道中
                   OutputStreamoutputStream = clientSocket.getOutputStream();
                   PrintWriterprintWriter = new PrintWriter(outputStream);
                   //读取来自服务端的数据回应
                  BufferedReader bufferedReaderServer = new BufferedReader(
                               newInputStreamReader(clientSocket.getInputStream()));
                  while(true){
                   StringSystemStr = bufferedReader.readLine();
                  printWriter.println(SystemStr);
                  printWriter.flush();
                  //打印服务器端回应
                   StringServerStr =bufferedReaderServer.readLine();
                  System.out.println(ServerStr);
                  if(SystemStr.equals("exit")){
                         break;
                   }
                   }
                  clientSocket.close();
             } catch(Exception e) {

             }

       }

}
再看udp:
服务端:

package review.socketTcpOrUdp;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class ServerUdp {

       publicstatic void main(String[] args) {
             try {
                  DatagramSocket datagramSocket = new DatagramSocket(9578);
                   while (true){
                        DatagramPacket recieveDatagramPacket = new DatagramPacket(newbyte[1024], 1024);
                        datagramSocket.receive(recieveDatagramPacket);
                         StringclientUdpStr = new String(recieveDatagramPacket.getData());
                        System.out.println(clientUdpStr);
                         //发出数据包
                        DatagramPacket sendDatagramPacket = new DatagramPacket("yes I canrecive".getBytes(),
                                     "yes I canrecive".getBytes().length,recieveDatagramPacket.getAddress(),
                                    recieveDatagramPacket.getPort());
                        datagramSocket.send(sendDatagramPacket);
                         if(clientUdpStr.trim().equals("exit")) {
                               break;
                         }
                        //datagramSocket.close();
                   }
                  datagramSocket.close();
             } catch(Exception e) {
                  e.printStackTrace();
             }

       }

}

客户端:
package review.socketTcpOrUdp;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

public class ClientUdp {

       publicstatic void main(String[] args)   {
             try{
            DatagramSocket datagramSocket = new DatagramSocket();
             while (true){
                   //DatagramSocket datagramSocket =new DatagramSocket();
                  InputStreamReader inputStreamReader = newInputStreamReader(System.in);
                  BufferedReader bufferedReader = newBufferedReader(inputStreamReader);
                   StringclientStr = bufferedReader.readLine();
                  DatagramPacket sendDatagramPacket = newDatagramPacket(clientStr.getBytes(),clientStr.getBytes().length,
                              InetAddress.getLocalHost(), 9578);
                  datagramSocket.send(sendDatagramPacket);
                  DatagramPacket recieveDatagramPacket =new DatagramPacket(newbyte[1024], 1024);
                  datagramSocket.receive(recieveDatagramPacket);
                   StringServerDatagramPacket = newString(recieveDatagramPacket.getData());
                  System.out.println(ServerDatagramPacket);
                  if(clientStr.equals("exit")){
                         break;
                   }
             }
                    datagramSocket.close();
            }catch(Exception e){
                  e.printStackTrace();
             }
           
       }
}
对比Tcp和Udp我们知道:
1:Tcp事先建立连接,按序到达,相对安全可靠(114查询台)
2:Udp不建立连接,不安序,但效率高,没有主次之分(QQ聊天)

另外bufferedReader.readLine();方法控制台输入的字符完整内容是"zifu/n/t"所以服务段读取内容时要把字符.trim方法消除首尾空格,这样用equal方法就能比较了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值