Java Socket编程 Tcp/Udp

来源:互联网 发布:ip138离线数据库 编辑:程序博客网 时间:2024/06/06 02:04
*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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孩子写字手没劲怎么办 孩子一口药不吃怎么办 小孩不爱喝药怎么办 小孩恶心想吐怎么办 孩子和婆婆不好怎么办 孩子吃东西不消化吐怎么办 小孩吃东西吐了怎么办 儿童吃饭容易吐怎么办 宝宝吃饭会吐怎么办 小孩咳嗽还呕吐怎么办 咳嗽严重到呕吐怎么办 幼儿园中班不会写字怎么办 胃难受吐了怎么办 小孩不肯学写字怎么办 孩子不爱穿内裤怎么办 孩子长期不吃肉怎么办 小孩子不吃肉怎么办呢? 一年级小孩写字慢怎么办 听障碍放弃了怎么办 宝宝开始写字该怎么办 恢复的文档乱码怎么办 小孩做作业磨蹭怎么办 宝宝用左手写字怎么办 小孩动作太慢怎么办 幼儿园不去上学怎么办 嫌弃婆婆带孩子怎么办 孩子写字特别慢怎么办 幼儿园孩子不愿写字怎么办 孩子不愿用力写字怎么办 老公得了懒癌怎么办 太懒不想上班怎么办 写字太多手臂痛怎么办 小孩读书务工证怎么办 一年级孩子撕书怎么办 孩子上幼儿园不适应怎么办 一年级没办学籍怎么办 宝宝不爱做作业怎么办 儿子不爱做作业怎么办 我不想去上学怎么办 孩子写字爱玩怎么办 孩子不爱学习写字怎么办