• Java study 2:The note of studying Socket which based TCP


    1. TCP concept:

          传输控制协议(Transmission Control Protocol, TCP)是一种面向连接(连接导向)的、可靠的、基于字节流运输层(Transport layer通信协议,由IETF的RFC 793说明(specified)。(from bing)

      2、TCP program:
          (1)、有明确的C/S之分,Server端用ServerSocket,Client端用Socke;

          (2)、Server端用accept()做監聽等待接收,一旦有鏈接連上的話,返回一個Socket對象作爲Client

          (3)、C/S都是用getInputStream/getOutputStream來讀取/寫入message

    下面上代碼:

     1 import java.io.BufferedReader;
     2 import java.io.IOException;
     3 import java.io.InputStreamReader;
     4 import java.io.PrintWriter;
     5 import java.net.ServerSocket;
     6 import java.net.Socket;
     7 
     8 public class ServerCode {
     9     private static int port =4444;
    10     static Socket cs;
    11     public static void main(String[] args) throws IOException {
    12         ServerSocket ss=new ServerSocket(port);
    13         cs=ss.accept();
    14         System.out.println("Accept :"+cs);
    15         try{
    16             BufferedReader br=new BufferedReader(new InputStreamReader(cs.getInputStream()));
    17             PrintWriter pr=new PrintWriter(cs.getOutputStream(),true);
    18             while(true){
    19                 String str=br.readLine();
    20                 if(str.equals("bye")){
    21                     break;
    22                 }
    23                 System.out.println("Client->Server:"+str);
    24                 pr.println("send back to client:"+str);
    25             }
    26             br.close();
    27             pr.close();
    28         }catch(Exception e){
    29             System.out.println("error:"+e);
    30         }finally{
    31             System.out.println("close the Server socket and the io.");
    32             cs.close();
    33             ss.close();
    34         }
    35         
    36     }
    37 
    38 }
    ServerCode
     1 import java.io.BufferedReader;
     2 import java.io.IOException;
     3 import java.io.InputStreamReader;
     4 import java.io.PrintWriter;
     5 import java.net.InetAddress;
     6 import java.net.Socket;
     7 
     8 public class ClientCode {
     9     public static void main(String[] args) throws IOException {
    10         InetAddress add=InetAddress.getByName("localhost");
    11         Socket cs=new Socket(add,4444);
    12         System.out.println("socket = " + cs);
    13         try{
    14             BufferedReader br=new BufferedReader(new InputStreamReader(cs.getInputStream()));
    15             PrintWriter pw=new PrintWriter(cs.getOutputStream(),true);
    16             pw.println("Hello I'm qixi");
    17             String str=br.readLine();
    18             System.out.println(str);
    19             pw.println("bye");
    20         }catch(Exception e){
    21             System.out.println(e);
    22         }finally{
    23             System.out.println("close the Client socket and the io.");
    24             cs.close();
    25         }
    26     }
    27 }
    ClientCode

     p.s.I:服务器是被动地监听一个客户端的连接请示然后给他们服务.服务器是由类ServerSocket来建立的.下面的程序建立了一个服务器端socket并把它绑定到80端口:

    ServerSocket serverSocket = new ServerSocket(80, 5); 

    第一个参数是服务器要监听的端口.第二个参数是可选的.API文档中说明了这是一个监听时间,但是在传统的socket程序中第二个参数是监听深度.一个服务器可以同时接收多个连接请求,但是每次只能处理一个.监听堆是一个无回答的连接请求队列.如果省略了后面的一个参数,则默认值是50.
    (from http://www.jb51.net/article/5551.htm)

  • 相关阅读:
    二分查找
    Linux下查找目录中所有文件中含有某个字符串,并且只打印出文件名
    编码规范
    Cookie和Session的选择,以及如何解决分布式系统下各个服务器之间Session不统一的问题
    Mac VMware Fusion 11.5 虚拟机带密钥
    快速排序
    python装饰器
    商品详情页
    hadoop跑wordcount报expected org.apache.hadoop.io.Text, received org.apache.hadoop.io.LongWritable
    CentOS7设置共享文件夹不显示问题
  • 原文地址:https://www.cnblogs.com/qixi233/p/4418238.html
Copyright © 2020-2023  润新知