JAVA SOCKET的2种实现

<!-- /* Font Definitions */ @font-face {font-family:Wingdings; panose-1:5 0 0 0 0 0 0 0 0 0; mso-font-charset:2; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"/@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin-top:0cm; margin-right:0cm; margin-bottom:6.0pt; margin-left:0cm; mso-pagination:none; mso-layout-grid-align:none; text-autospace:none; font-size:10.5pt; mso-bidi-font-size:10.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体;} p.MsoHeader, li.MsoHeader, div.MsoHeader {margin-top:0cm; margin-right:0cm; margin-bottom:6.0pt; margin-left:0cm; text-align:center; mso-pagination:none; tab-stops:center 207.65pt right 415.3pt; layout-grid-mode:char; mso-layout-grid-align:none; text-autospace:none; border:none; mso-border-bottom-alt:solid windowtext .75pt; padding:0cm; mso-padding-alt:0cm 0cm 1.0pt 0cm; font-size:9.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体;} p.MsoFooter, li.MsoFooter, div.MsoFooter {margin-top:0cm; margin-right:0cm; margin-bottom:6.0pt; margin-left:0cm; mso-pagination:none; tab-stops:center 207.65pt right 415.3pt; layout-grid-mode:char; mso-layout-grid-align:none; text-autospace:none; font-size:9.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:595.3pt 841.9pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:42.55pt; mso-footer-margin:49.6pt; mso-paper-source:0; layout-grid:15.6pt;} div.Section1 {page:Section1;} /* List Definitions */ @list l0 {mso-list-id:166480649; mso-list-type:hybrid; mso-list-template-ids:775840906 942051372 67698689 67698703 658045874 67698713 67698715 67698703 67698713 67698715;} @list l0:level1 {mso-level-number-format:chinese-counting-thousand; mso-level-text:%1、; mso-level-tab-stop:21.0pt; mso-level-number-position:left; margin-left:21.0pt; text-indent:-21.0pt; mso-ansi-language:EN-US;} @list l0:level2 {mso-level-number-format:bullet; mso-level-text:; mso-level-tab-stop:42.0pt; mso-level-number-position:left; margin-left:42.0pt; text-indent:-21.0pt; font-family:Wingdings; mso-ansi-language:EN-US;} @list l0:level3 {mso-level-tab-stop:108.0pt; mso-level-number-position:left; text-indent:-18.0pt;} @list l0:level4 {mso-level-tab-stop:81.0pt; mso-level-number-position:left; margin-left:81.0pt; text-indent:-18.0pt; mso-ansi-language:EN-US;} @list l0:level5 {mso-level-tab-stop:180.0pt; mso-level-number-position:left; text-indent:-18.0pt;} @list l0:level6 {mso-level-tab-stop:216.0pt; mso-level-number-position:left; text-indent:-18.0pt;} @list l0:level7 {mso-level-tab-stop:252.0pt; mso-level-number-position:left; text-indent:-18.0pt;} @list l0:level8 {mso-level-tab-stop:288.0pt; mso-level-number-position:left; text-indent:-18.0pt;} @list l0:level9 {mso-level-tab-stop:324.0pt; mso-level-number-position:left; text-indent:-18.0pt;} @list l1 {mso-list-id:1037196937; mso-list-type:hybrid; mso-list-template-ids:-645251058 658045874 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l1:level1 {mso-level-tab-stop:81.0pt; mso-level-number-position:left; margin-left:81.0pt; text-indent:-18.0pt; mso-ansi-language:EN-US;} ol {margin-bottom:0cm;} ul {margin-bottom:0cm;} -->

JAVA SOCKET 2 种实现

一、      TCP 实现

Java Socket 编程 TCP 实现,比较容易懂。

  服务端代码

import java.io.IOException;

   import java.net.InetAddress;

   import java.net.Socket;

   public class ServerSocket {

   public static void main(String[] args) {

   beginSocket();

   }

   public static void beginSocket(){

   try {

   java.net.ServerSocket serverSocket=new java.net.ServerSocket(3456);

   InetAddress inta=serverSocket.getInetAddress().getLocalHost();

   System.out.println(inta.getHostAddress());

   while(true){

   Socket socket=serverSocket.accept();

   new HelloMessage(socket);

   }

   } catch (IOException e) {

   e.printStackTrace();

   }

   }

   }

 

    // 为了提高并发时的处理效率,对于每个请求,系统都新建一个线程处理。

   Java 代码

   import java.io.BufferedReader;

   import java.io.InputStreamReader;

   import java.io.PrintWriter;

   import java.net.Socket;

   public class HelloMessage extends Thread {

   private Socket socket_ = null;

   public HelloMessage(Socket socket) {

   this.socket_ = socket;

   this.start();

   }

   public void run() {

   try {

   BufferedReader bReader = new BufferedReader(new InputStreamReader(

   this.socket_.getInputStream()));

   PrintWriter pWriter = new PrintWriter(this.socket_

   .getOutputStream());

   String requestStr = bReader.readLine();

   if (requestStr != null && !"".equals(requestStr)) {

   if (requestStr.equals("java")) {

   pWriter.println("your write is java");

   }

   if (requestStr.equals(".net")) {

   pWriter.println("your write is .net");

   }

   if (requestStr.equals("php")) {

   pWriter.println("your write is php");

   }

 

   if (requestStr.equals("end")) {

   pWriter.println("your write is end");

   }else{

   pWriter.println("your write is other");

   }

   }else{

   pWriter.println("your write is null");

   }

   pWriter.flush();

   pWriter.close();

   bReader.close();

   this.socket_.close();

   } catch (Exception e) {

   e.printStackTrace();

   }

}

}

客户端代码

import java.io.BufferedReader;

   import java.io.IOException;

   import java.io.InputStreamReader;

   import java.io.PrintWriter;

   import java.net.Socket;

   import java.net.UnknownHostException;

   public class ClientSocket {

   public static void main(String[] args) {

clientRequest();

   }

   private static void clientRequest() {

 

   try {

   while (true) {

   Socket clientSocket = new Socket("172.168.4.105", 3456);

   BufferedReader bReader = new BufferedReader(new InputStreamReader(

   System.in));

   System.out.println("please input java or .net or php or end");

   String strLine = bReader.readLine();

   if (strLine != null && !"".equals(strLine)) {

   PrintWriter pWriter = new PrintWriter(clientSocket

   .getOutputStream(), true);

   pWriter.println(strLine);

   BufferedReader br = new BufferedReader(

   new InputStreamReader(clientSocket.getInputStream()));

   String strResult = br.readLine();

   System.out.println(strResult);

   pWriter.flush();

   pWriter.close();

   clientSocket.close();

   }

   }

   } catch (UnknownHostException e) {

   e.printStackTrace();

   } catch (IOException e) {

   e.printStackTrace();

   }

   }

   }

  这样一个简单的 TCP Socket 编程的原型就成了。简单介绍下:

  几个比较重要的API

 

   .Accept 方法用于产生 " 阻塞 " ,直到接受到一个连接,并且返回一个客户端的 Socket 对象实例。

   .getInputStream 方法获得网络连接输入,同时返回一个 IutputStream 对象实例,。

   .getOutputStream 方法连接的另一端将得到输入,同时返回一个 OutputStream 对象实例。

 

二、      UDP 实现

import java.io.IOException;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

   import java.net.InetAddress;

   import java.net.SocketException;

   public class UDPReceive {

   public static void main(String[] args) {

   Integer port = 2345;

   byte[] buffer = new byte[2048];

   try {

   DatagramSocket datagramSocket = new DatagramSocket(port);

   DatagramPacket datagramPacket = new DatagramPacket(buffer,buffer.length);

   try {

   for (;;) {

   System.out.println("begin receive data....");

   datagramSocket.receive(datagramPacket);

System.out.println(datagramPacket.getAddress().getAddress().toString()+"======="

+new String(datagramPacket.getData()));

   datagramPacket.setLength(datagramPacket.getData().toString().length());

   }

   } catch (IOException e) {

   e.printStackTrace();

   }

   } catch (SocketException e) {

   e.printStackTrace();

   }

   }

   }

 

  客户端代码

   import java.io.IOException;

   import java.net.DatagramPacket;

   import java.net.DatagramSocket;

   import java.net.InetAddress;

   import java.net.SocketException;

   import java.net.UnknownHostException;

   public class UDPSend {

   public static void main(String[] args) {

   try {

   for (;;) {

   DatagramSocket sendSocket = new DatagramSocket();

   DatagramPacket dataPack = new DatagramPacket(

   "hello ,welcome to study java..".getBytes(),

   "hello ,welcome to study java..".length(), InetAddress

   .getByName("127.0.0.1"), new Integer(2345));

   try {

   sendSocket.send(dataPack);

   sendSocket.close();

   } catch (IOException e) {

   e.printStackTrace();

   }

   }

   } catch (SocketException e) {

   e.printStackTrace();

   } catch (UnknownHostException e) {

   e.printStackTrace();

   }

   }

   }

三、      比较

UDP:

1.       每个数据报文中都给出了完整的地址信息,因此无需建立接收方和发送方的连接。

2.       UDP 传输有大小限制,每个传输的数据报文必须在 64KB 之内。

3.       UDP 是一个不可靠协议,数据报文并不一定按照顺序到达接收方。

TCP:

1.       需要建立连接,所以建立连接需要时间。

2.       建立连接之后,双发就可以按照统一的格式传输大的数据。

3.       TCP 是一个可靠协议,接收方可以完全正确的获取发送方所发送的所有数据。

四、      应用

UDP:

     UDP 操作简单,很少需要监护,通常用于局域网高可靠性的分散系统,例如视频会议,并不需要视频数据的绝对正确,只需要连贯就可以了。这时使用 UDP 更合理一些。

TCP:

      TCP 在网络通信上很出色,例如 Telnet FTP 都需要不定长的数据被完整的传输,但是可靠传输是要付出代价的,它会占用计算机处理时间和网络带宽。因此, tcp 的传输效率并不比 UDP 高。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值