java中如何实现多个客户端与服务器连接

java中如何实现多个客户端与服务器连接,第1张

服务器端可以采用多线程处理客户请求,例如:

package threadPool;

import javaioBufferedReader;

import javaioIOException;

import javaioInputStream;

import javaioInputStreamReader;

import javaioOutputStream;

import javaioPrintWriter;

import javanetServerSocket;

import javanetSocket;

import javautilconcurrentExecutorService;

import javautilconcurrentExecutors;

public class ThreadPoolServer {

private int port = 8000;

private ServerSocket serverSocket;

private ExecutorService executorService; //线程池

private final int POOL_SIZE = 4; //单个CPU时线程池中的工作线程数目

public ThreadPoolServer() throws IOException{

serverSocket = new ServerSocket(port);

//创建线程池

//Runtime 的availableProcessors()方法返回当前系统CPU的数目

//系统CPU越多,线程池中的工作线程数目越多

executorService = ExecutorsnewFixedThreadPool(RuntimegetRuntime()availableProcessors()POOL_SIZE);

Systemoutprintln("服务器已启动!!");

}

public void service(){

while(true){

Socket socket = null;

try{

socket = serverSocketaccept();

executorServiceexecute(new Handler(socket));

}catch(IOException e){

eprintStackTrace();

}

}

}

public static void main(String[] args) {

try {

new ThreadPoolServer()service();

} catch (IOException e) {

eprintStackTrace();

}

}

}

class Handler implements Runnable {

private Socket socket;

public Handler(Socket socket) {

thissocket = socket;

}

private PrintWriter getWriter(Socket socket) throws IOException {

OutputStream socketOut = socketgetOutputStream();

return new PrintWriter(socketOut, true);

}

private BufferedReader getReader(Socket socket) throws IOException {

InputStream socketIn = socketgetInputStream();

return new BufferedReader(new InputStreamReader(socketIn));

}

public String echo(String msg) {

return "echo:" + msg;

}

@Override

public void run() {

try {

Systemoutprintln("New connection accepted:" + socketgetInetAddress() + ":" + socketgetPort());

BufferedReader br = getReader(socket);

PrintWriter pw = getWriter(socket);

String msg = null;

while ((msg = brreadLine()) != null) {

Systemoutprintln(msg);

pwprintln(echo(msg));

if (msgequals("bye")) {

break;

}

}

} catch (IOException e) {

eprintStackTrace();

} finally {

try {

if (socket != null)

socketclose();

} catch (IOException e) {

eprintStackTrace();

}

}

}

}

只要配置你的TNSNAMESORA文件中的脚本即可。

C:\oracle\ora92\network\admin 这个目录下

比如

a1=

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 19216821)(PORT = 1521))

)

(CONNECT_DATA =

(SID = a1)

)

)

b1=

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST =19216822)(PORT = 1521))

)

(CONNECT_DATA =

(SID = b1)

)

)

c1=

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 19216823)(PORT = 1525))

)

(CONNECT_DATA =

(SID = c1)

)

)

首先需要解决你IP地址的问题。如果你是外部要访问的话,必须将你安装FTP服务器的IP地址设为路由器的DMZ主机(如:DMZ主机

在某些特殊情况下,需要让局域网中的一台计算机完全暴露给广域网,以实现双向通信,此时可以把该计算机设置为DMZ主机。

( 注意:设置DMZ主机之后,与该IP相关的防火墙设置将不起作用。)

DMZ主机IP地址: 1921681 启用

然后通过路由器管理工具找到你拨号的时自动生成的IP地址,这时候你的机器就拥有真正的互联网地址了(

WAN口状态

MAC 地址: 00-14-78-C0-00-05

IP地址: 59173213134 PPPoE

子网掩码: 255000

网关: 59173213134

DNS 服务器: 2021032468, 2021030117

)

注意:由于是拨号,你的IP可能会随着拨号而变化。

然后安装SERV-U就可以了(在关内容请看下一贴)

以上工作完毕之后可以如此访问你的FTP: ftp 59173213134(假设这个IP是你PPOE拨号的IP地址)

参考上一个方法。

一个客户端,我可以简单的理解成一个进程。

一个进程可以很多个 SOCKET。

一个SOCKET 可以连接一个服务器,建立一个连接。

新手,建议就用CSocket吧, 针对每个服务器实例化一个对象。

至于SOCKET模型,不急,等基本的会了,再深入。

\oracle\product\1020\db_1\NETWORK\ADMIN\tnsnamesora中直接添加配置来完成,或者通过命令:开始--运行--cmd---netca,弹出的窗口中选择本地net服务名配置,按照提示配置就OK方法有很多种

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » java中如何实现多个客户端与服务器连接

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情