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地址连接啊。
不是的,给你个简单的通信例子吧. 下面两个类可以进行客户端到服务器端的相互通信. 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(); } } }
Create a server with the specified port, listen backlog, and local IP address to bind to.
backlog是指什么?为什么绑定的是local IP?我要限制的是外网的IP地址连接啊。
下面两个类可以进行客户端到服务器端的相互通信.
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();
}
}
}
也就是说,我只容许某个外网IP地址的Client连接。
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是针对某个特定服务器的。
if(client.getInetAddress().equals("212.153.216.165")) {
addConnection(client, service);
}
else {
client.close();
}这样对吗?
.
.
.
.
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();
}
}