zoukankan      html  css  js  c++  java
  • JAVA Socket编程(二)之TCP通信

    基于TCP(面向连接)的socket编程,分为客户端和服务器端。

    客户端的流程如下:

    (1)创建套接字(socket)

    (2)向服务器发出连接请求(connect)

    (3)和服务器端进行通信(send/recv)

    (4)关闭套接字

    服务器端的流程如下:

    (1)创建套接字(socket)

    (2)将套接字绑定到一个本地地址和端口上(bind)

    (3)将套接字设为监听模式,准备接收客户端请求(listen)

    (4)等待客户请求到来;当请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept)

    (5)用返回的套接字和客户端进行通信(send/recv)

    (6)返回,等待另一个客户请求。

    (7)关闭套接字。

     

    本文介绍一个多线程的TCP编程

    1:创建服务器端并实现线程类  代码如下

     1 package tcp;
     2 
     3 import java.io.BufferedReader;
     4 import java.io.InputStreamReader;
     5 import java.io.PrintWriter;
     6 import java.net.Socket;
     7 
     8 public class Server implements Runnable {//实现一个线程类
     9 private Socket soc;
    10     public Server(Socket soc) {
    11     super();
    12     this.soc = soc;
    13 }
    14     private BufferedReader in=null;
    15     private BufferedReader input=null;//获得各种流对象
    16     PrintWriter out=null;
    17     @Override
    18     public void run() {
    19         // TODO Auto-generated method stub
    20         try {
    21             in=new BufferedReader(new InputStreamReader(soc.getInputStream()));
    22             input=new BufferedReader(new InputStreamReader(System.in));
    23             out=new PrintWriter(soc.getOutputStream(),true);//每次都清空输出流
    24             String message;
    25             while((message=in.readLine())!=null){
    26                 System.out.println(message);//读取到的客户端数据
    27                 System.out.println("输入回执的数据:");
    28                 out.println(input.readLine());//回执数据
    29             }
    30         } catch (Exception e) {
    31             // TODO: handle exception
    32             e.printStackTrace();
    33         }finally{
    34             try {
    35                 in.close();
    36                 input.close();//关闭各种流对象
    37                 out.close();
    38             } catch (Exception e2) {
    39                 e2.printStackTrace();
    40                 // TODO: handle exception
    41             }
    42         }
    43     }
    44 
    45 }

    2:创建多线程的启动类   代码如下

     1 package tcp;
     2 
     3 import java.net.ServerSocket;
     4 import java.net.Socket;
     5 
     6 public class ServerStart {
     7 
     8     public static void main(String[] args) {
     9         // TODO Auto-generated method stub
    10         try {
    11             ServerSocket server=new ServerSocket(9000);//这只9000为服务器段
    12             Socket soc=new Socket();
    13             while (true) {
    14                 soc=server.accept();//监听端口的链接
    15                 new Thread(new Server(soc)).start();//只要有链接就启动一个线程
    16             }
    17         } catch (Exception e) {
    18             // TODO: handle exception
    19             e.printStackTrace();
    20         }
    21     }
    22 
    23 }

    3:创建客户端的类  代码如下

     1 package tcp;
     2 
     3 import java.io.BufferedReader;
     4 import java.io.InputStreamReader;
     5 import java.io.PrintWriter;
     6 import java.net.Socket;
     7 
     8 public class Client {
     9     private static Socket soc=null;
    10     private static BufferedReader in=null;
    11     private static BufferedReader input=null;
    12     private static PrintWriter out=null;
    13     
    14     public static void main(String[] args) {
    15         // TODO Auto-generated method stub
    16         try {
    17             soc=new Socket("127.0.0.1",9000);
    18             while(true){
    19             in=new BufferedReader(new InputStreamReader(soc.getInputStream()));
    20             input=new BufferedReader(new InputStreamReader(System.in));
    21             out=new PrintWriter(soc.getOutputStream(),true);
    22             System.out.println("输入发送的数据:");
    23             String op=input.readLine();
    24             out.println(op);
    25             if(op.equals("aa")){
    26                 break;
    27             }
    28                 System.out.println(in.readLine());
    29             }
    30         } catch (Exception e) {
    31             // TODO: handle exception
    32             e.printStackTrace();
    33         }finally{
    34             try {
    35                 in.close();
    36                 input.close();
    37                 out.close();
    38             } catch (Exception e2) {
    39                 // TODO: handle exception
    40                 e2.printStackTrace();
    41             }
    42         }
    43     }
    44 
    45 }

     udp查看:http://www.cnblogs.com/GH0522/p/8119289.html

  • 相关阅读:
    JavaScript讲义(三)
    jQuery学习(五)
    jQuery学习(七)
    JavaScript讲义(一)
    jQuery学习(六)
    这些东西不宜空腹吃[转]
    pexpect实现的ssh连接(pexpect可从sourceforge下载)
    Using the commandline connection tool Plink
    【转】系统管理类DOS命令汇总
    挺有意思的QQ资料
  • 原文地址:https://www.cnblogs.com/GH0522/p/8119533.html
Copyright © 2011-2022 走看看