zoukankan      html  css  js  c++  java
  • 网络开发Socket和ServerSocket

    已经发表个人公众号

    Socket和ServerSocket


    Socket为“孔”或“插座”,创建Socket,打开连接Socket的输入或输出流,对Socket进行读写,关闭Socket。


    Accept方法用于产生“阻塞”,这里有getInputStream方法和getOutInputStream方法,会产生一个IOException,


    在Java.net包中,有Socket和ServerSocket两个类。以JDK1.6介绍:


    构造方法

    public Socket()
    public Socket(String host, int port)
    //host - 主机名,或者为 null,表示回送地址
    //port - 端口号
    
    public Socket(InetAddress address,int port)
    //address - IP 地址
    //port - 端口号

    ServerSocket类有3个构造方法

    ServerSocket(int port)
    
    ServerSocket(int port,int backlog)
    
    ServerSocket(int port,int backlog,InetAddress binAddr)
    服务器与客户端通信

    package two;
    
    import java.io.DataInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.io.PrintStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class ServerSocket1 {
     public static void main(String[] args) {
       // TODO Auto-generated method stub
       try {
         ServerSocket ss = new ServerSocket(2007);
         while(true) {
           Socket s = ss.accept();
           InputStream is = s.getInputStream();
           OutputStream os = s.getOutputStream();
           PrintStream ps = new PrintStream(os);
           ps.println("helloworld, i am server thinkpad");
           
           DataInputStream dis = new DataInputStream(is);
           String str = dis.readLine();
           System.out.println(str);
           s.close();
           
         }
       }
       catch(IOException ee) {
         System.out.println(ee);
       }
       catch(Exception e) {
         System.out.println(e);
       }
     }
    }
    package two;
    
    import java.io.DataInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.io.PrintStream;
    import java.net.ConnectException;
    import java.net.Socket;
    
    public class ClientSocket {
     public static void main(String[] args) {
       // TODO Auto-generated method stub
       try {
         Socket s = new Socket("########",2007);
         InputStream is = s.getInputStream();
         OutputStream os = s.getOutputStream();
         PrintStream ps = new PrintStream(os);
         ps.println("hello , i am client");
         
         DataInputStream dis = new DataInputStream(is);
         
         String str = dis.readLine();
         System.out.println(str);
         s.close();
         
       }
       catch(ConnectException eee) {
         System.out.println(eee);
       }
       catch(IOException ee) {
         System.out.println(ee);
       }
       catch(Exception e) {
         System.out.println(e);
       }
     }
    }
    线程:


    线程也称为轻量级进程,是程序执行的最小单元。是程序中一个单一的顺序控制流程,在程序中同时运行多个线程,称为多线程。进程是一个可执行的程序。一个应用可以有一个或多个进程,对于一个进程可以有一个或多个线程,其中一个是主线程,public static void main。


    创建,执行线程的速度比进程更快。


    多客户请求服务

    public class DuoServer{
    public static void main(String[] args){
     boolean connected = true;
     try{
      ServerSocket ss = new ServerSocket(2007);
      int clientnum=0;
      while(connected){
       ServerThread st = new ServerThread(ss.accept(),clientnum);
       st.start();
       clientnum++;
       System.out.println(clientnum);
      }
    }
    catch(Excepiton e){
     System.out.println(e);
    }
    }
    }
    
    class ServerThread extends Thread{
    private Socket s;
    int clientnum;
    public ServerThread(Socket s, int num){
     this.s = s;
     clientnum = num + 1;
    }
    public void run(){
     try{
      InputStream is = s.getInputStream();
      OutputStream os = s.getOutputStream();
      PrintStream ps = new PrintStream(os);
      ps.println("i am server");
      
      DataInputStream dis = new DataInputStream(is);
      String str = dis.readLine();
      System.out.println(str);
      }
      catch(Excepiton e){
       System.out.println(e);
      }
     }
    }
  • 相关阅读:
    201720181 JaWorld 第三周作业
    201720181 Java小组1623 第一周作业
    201720181 JaWorld 第四、五周作业
    201720181 Java小组1623 第二周作业
    无法打开用户默认数据库的解决方法
    技术网站/博客网址收藏
    .net中防止用户多次登录的方法
    asp.net导出excel方法总结
    面向对象设计模式之Bridge桥接模式(结构型)
    面向对象设计模式之Composite组合模式(结构型)
  • 原文地址:https://www.cnblogs.com/dashucoding/p/11932700.html
Copyright © 2011-2022 走看看