构造 SeverSocket 时的 参数旧可以限定那个IP 进行连接。
 ServerSocket(int port,int backlog,InetAddrass bindAddr)
 第三个参数就是只容许的IP。

解决方案 »

  1.   

    ServerSocket(int port, int backlog, InetAddress bindAddr)           
    Create a server with the specified port, listen backlog, and local IP address to bind to.
    backlog是指什么?为什么绑定的是local IP?我要限制的是外网的IP地址连接啊。
      

  2.   

    backlog指定此socket上等候处理的连接的最大数,若没有指定,默认为50,当连接数达到规定植时,用户再发来得连接请求失败,并引起IOException
      

  3.   

    我想问个问题:ServerSocket 和Socket 是如何通信的?比如:服务器端 ServerSocket(10000,10) 是不是客户端是Socket(localhost,10000)的都可以被ServerSocket  accept().
      

  4.   

    不是的,给你个简单的通信例子吧.
    下面两个类可以进行客户端到服务器端的相互通信.
    package com.urlybird.test.net;import java.net.ServerSocket;
    import java.net.Socket;
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;/**
     * Created by IntelliJ IDEA.
     * User: heyj
     * Date: 2004/03/22
     * Time: 10:49:34
     * To change this template use Options | File Templates.
     */
    public class EchoServer {
        public static void main(String[] args) {
            try{
                ServerSocket s = new ServerSocket(8180);
                boolean done = false;
                while(!done){
                    Socket incoming = s.accept();
                     BufferedReader in = new BufferedReader(new InputStreamReader(incoming.getInputStream()));
                     PrintWriter out = new PrintWriter(incoming.getOutputStream(),true);
                     out.println("Hello,Enter bye to exit.");
                    String line = "";
                    while((line = in.readLine()) != null){
                        if(line.trim().equals("bye")){
                            done = true;
                        }
                    }
                    in.close();
                    out.close();
                    incoming.close();           }
    //             incoming.close();
            }catch(Exception e){
                e.printStackTrace();
            }
        }
    }
    下面的是客户端:
    package com.urlybird.test.net;import java.net.Socket;
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;/**
     * Created by IntelliJ IDEA.
     * User: heyj
     * Date: 2004/03/22
     * Time: 10:56:26
     * To change this template use Options | File Templates.
     */
    public class SocketTest {
        public static void main(String[] args) {
            try{
                
                Socket s = new Socket("127.0.0.1",8180); //" server IPaddress ,port "
                PrintWriter out = new PrintWriter(s.getOutputStream(),true);
                BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));            BufferedReader into = new BufferedReader(new InputStreamReader(System.in));
                StringBuffer sb = new StringBuffer();            boolean more = true;
               String line = in.readLine();
               if(line == null)more = false;
               else{
                        System.out.println("server :"+line);
    //               into.readLine();
                   while(true){
                       String ss = into.readLine();
                       if(ss.equals("bye")){break;}
                        out.println(ss);
                   }
               }        }catch(Exception e){
                e.printStackTrace();
            }
        }
    }
      

  5.   

    大家的讨论都偏离我的问题了,ServerSocket如何控制连接请求的Client的IP地址?
    也就是说,我只容许某个外网IP地址的Client连接。
      

  6.   

    当服务器端运行时,监听8180端口;当客户端运行时,服务器端回连接客户端我还想问:是不是我随便写一个java程序,包括socket("",8180),是不是服务器端都可以监听到我的socket().
      

  7.   

    假如网络中有两台机器在运行服务器端程序,那么客户端的socket 是不是被两者都监听到,
      

  8.   

    -----------------------------
    public ServerSocket(int port,
                        int backlog,
                        InetAddress bindAddr)
    ------------------------------
    bingAddr是ServerSocket对应的IP,ServerSocket实例必须和一个IP地址绑定,如果你不提供
    的话,缺省用运行程序的主机的。             ------------------------------
    ServerSocket如何控制连接请求的Client的IP地址
    ------------------------------Socket s=serverSocket.accept();
    if(s.getInetAddress().....){
        //Reject
    }
    ------------------------------
    是不是我随便写一个java程序,包括socket("",8180),是不是服务器端都可以监听到我的socket()
    -----------------------------
    你将Server和Client都放在同一部机器上当然是这样了,socket要用ServerSocket的IP或者是主机名来连接的。--------------------------------
    假如网络中有两台机器在运行服务器端程序,那么客户端的socket 是不是被两者都监听到
    ---------------------------------
    怎么可能?客户端socket是针对某个特定服务器的。
      

  9.   

    Socket client = listen_socket.accept();
                if(client.getInetAddress().equals("212.153.216.165")) {
                  addConnection(client, service);
                }
                else {
                  client.close();
                }这样对吗?
      

  10.   

    用人数据库,来记录允许的IP地址列表,然后加上一个搜索对比即可
    .
    .
    .
    .
    Sting user_ip=取出用户的IP地址
    boolean process=true;    //当合法时执行
    ....//数据库连接方面(略)
    //然后生成一个数据搜索条件(假设有个表iptable里有个字段(enable_ip)是记录合法可访问数据)
    String sql1="select enable_ip from iptable where enable_ip='"+user_ip+"'";
    .....// (执行查询)略...//然后对结果集作出判断(xxx)代表已声明的结果集变量
    if(!xxx.next()){process=false;}  //当搜索不到数据时,赋值给process表示不处理以下操作
    if(process==true)
    {
      Socket client = listen_socket.accept();             //放入合法IP
                if(client.getInetAddress().equals(user_ip)) {
                  addConnection(client, service);
                }
                else {
                  client.close();
                }
    }