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();
}
}
}
}

javasocket有两种方式。一种是UDP这个可以直连,不需要服务器。一种是TCP这个是肯定要能过服务器来通信的。所以你说的。链接建立完毕后不再通过服务器!这个可以实现,但会麻烦一些。1先说一下简单的点的吧。用TCP的方式。你所有的消息都是发给服务器。包含你的IP及通信端口,及对方的IP及通信端口信息。当然这些是隐藏在数据报中的。这样由服务器来进行分发。2你说的那种方式有点类似TCP与UDP混合。首先启动一个SERVER然后每一个客户端,先要登陆SERVER,并在server上记录下你的IP及通信端口信息,如果你要连接某一个客户端。先要向服务器发出一个申请,获得到方的IP及端口信息,然后进行UDP连接。连接上以后,就是直接发送息,不需要服务器了。javasocket的东西,以前做过一些,所以有思路,但没有现成的代码。有问题再联系。

服务器监听。客户连接到服务器后,死循环里READ并处理 那个连接,不要断开,同时可以发送信息
服务器里 做处理信息
这东西如果你从SOCKET开始做很复杂。你不但要了解套接字网络连接方法,还要了解套接字阻塞机制,还有读写阻塞机制还要处理读写超时处理,防DDOS攻击处理,还要了解异步处理SELECT或POLL。而且这种底层的程序用C#做很不值得,。如果你想从底层做,并且做的很好就用C写,并且要求效率。 如果不要求高效率那就直接用IIS做成WEB服务,配合数据库做,然后用客户端调用WEB服务

问题一:客户端如何连接服务器 客户端通过终端(终端有下载的软件,包括浏览器也属于终端),通过一个端口,连接到服务器指定的端口。服务器会监听这个端口,如何有这个端口的应用访问,则和终端用户交互,从而达到客户端连接服务器的作用。

问题二:客户端怎么连接到服务器的数据库上? 既然是这种数据库,那你就在你的电脑上装SQL SEVER数据库,然后下载对应的数据库管理软件就行了,当然在你安装完本地的数据库后要想访问远程服务器上的数据库一定需要配置,至于你说的一步一步,我觉得你应该百度搜一下,具体的安装都有

问题三:Java中客户端与服务器之间怎样连接? socket通信
客户端:Socket s= new Socket (localhost,8888);
服务器:ServerSocket ss户= new ServerSocket(8888);
Socket s=ssaccept();

问题四:客户端无法连接到服务器 您好
您可以尝试一下右击服务器的我的电脑-属性,找到远程桌面的部分,允许下
到服务器防火墙看看,是不是禁用了远程桌面,不懂的话直接关闭防火墙,也希望你没安装第三方网络防火墙

问题五:跪求金蝶K3客户端怎么连接服务器 K3客户端和服务器都要完整安装好,确定是在同一个网关内,并且能够相互PING得通。
然后再服务器上新建一个,与客户端开机登录的用户名和密码一致的用户(我的电脑->右击->管理->本地用户和组->用户),
之后就是在客户端远程组建配置工具中测试,通过后确定就OK了。

问题六:java怎么知道客户端连接服务器 java socket就可以完成

问题七:Android客户端怎么与服务器数据库连接? 客户端和服务端的数据库连接,是要服务器端做开发的,像javaee开发的服务端,然后客户端通过等连接到服务端,然后服务端通过一系列 *** 作,吧数据返回给客户端,这样就完成了一次连接。

问题八:上网认证客户端无法连接认证服务器怎么办? 认证客户端常见问题解答
1.客户端一运行即消失的故障
答:故障原因:如果用户的电脑设置了多个DNS或多个IP地址及系统里有system32exe这个进程,可能是木马进程序,有可能伪装成其它的名字的话,会导致以上故障。
故障解决办法如下:正确设置IP地址(只设置网络中心提供的地址)及DNS地址。

2.客户端提示“找不到合适的网卡”故障信息?
答:故障原因:系统没有正确获得网卡信息,或者网卡有问题。
故障解决办法如下:退出并重新打开客户端,如果问题依旧存在,请将网卡驱动程序卸载重装,如果还是不能解决问题,更换一张网卡。

3.客户端提示“目前系统工作环境与软件运行环境相冲突,软件不能正常运行,CODE=2”的故障信息?
答:故障原因:安装了多块网卡,与客户端运行的环境不符合要求。
故障解决办法:卸载或者禁用多余网卡,只保留一张网卡运行。

4.客户端提示“目前系统工作环境与软件运行环境相冲突,软件不能正常运行CODE=4”的故障信息?
答:故障原因:由于安装了代理软件,与客户端运行的环境不符合要求。
故障解决办法:关闭或卸载代理服务器以及一切可能成为代理服务器的软件。

5.客户端认证失败,没有任何的错误提示信息?
答:故障原因:WINXP启用了系统自带的8021X功能。
故障解决办法:双击网络连接图标,把属性里面的身份验证标签下“启用8021X身份认证”前的勾去掉。

6.客户端提示认证失败,提示“已达到最大连接数”的故障?
答:故障原因:使用的帐号已在线,可能使用了别人的帐号,或者帐号输入错误。
故障解决办法:确认自己帐号正确性,如果确属自己帐号,则告知相关请有效证件,要求网络中心将其帐号下线。

7.客户端提示认证失败,提示“IP类型错误”的故障?
答:故障原因:认证服务器没有获得IP地址信息。
故障解决办法:在本地连接属性里面把IP获取方式改为自动获取,如果还是不能解决,请将网卡驱动程序卸载重装一次。

8.客户端提示认证失败,提示“XXXX绑定错误”的故障?
答:故障原因:非正常使用帐号;目前使用的网卡相关设置和教育技术办用户信息数据库里的相关绑定记录不一致。
故障解决方法:正确使用个人帐号,不要随意更改设置;带有效证件到网络中心做修改。

9.客户端提示认证失败,提示“网卡未连接上”的故障?
答:故障原因:网线连接不正确,交换机柜停电等。
故障解决方法:检查网线是否正常,确认机房交换机柜是否停电。

10.客户端提示认证失败,认证客户端停顿在:“寻找认证服务器。。。”的故障?
答:故障原因:可能网卡有问题,或者没有选择“使用私有组播地址认证”。
故障解决方法:检查网线是否正常;将速率改成10M,在实际运行中存在某些线路无法进行100M的数据交换;在认证客户端中设置“使用私有组播地址认证”;重装网卡驱动程序;如果问题依旧存在,更换一张网卡。如果在更换网卡之后出现“MAC地址绑定错误”,证明以前用的网卡质量不好,请使用新的网卡,并网络中心重新绑定。

11.客户端提示初始化网卡信息失败的故障?
答:故障原因:电脑有多个网卡信息。
故障解决方法:禁用掉无用的网卡,特别注意,很多笔记本电脑带无线网卡,一定要禁用掉!

12.客户端无法认证成功,提示“不在认证时段内”的故障?
答:故障原因:不在允许的时段内认证使用网络。
故障解决方法:请确认时间段是否为管理人员允许上网的时段。

13.客户端无法认证成功,提示“用户不存在或者密码错”的故障?
>>

问题九:socket怎样使得多个客户端连接到一个服务器 在服务器端设置一个标志变量,如int flag = 0,当有客户端连接上了,就检查那个标志变量是否为0,如果是的话就连接,然后将这个标志设为1。如果为1的话就拒绝连接。我不知道你是用什么语言编写的,所以具体怎么去拒绝连接就自己多想想吧・・・
在java里面很容易实现,下面是我在java中实现的服务器端代码,希望对你有帮助。。。
package ob;

import javaioIOException;
import javaServerSocket;
import javaSocket;

public class Server {
Socket socket;
boolean flag = true;

public void createServer() {

try {
ServerSocket serverSocket = new ServerSocket(9090);
while (true) {

socket = serverSocketaccept();

if (flag) {

Systemoutprintln(有用户连上・・・);

Systemoutprintln(ip:+socketgetRemoteSocketAddress()toString()+ port:+socketgetPort());

flag = false;

}else{

Systemoutprintln(有用户连上・・・);

socketclose();

Systemoutprintln(关闭用户连接・・・);

}
}

} catch (IOException e) {
eprintStackTrace();
}

}
public static void main(String[] args) {
new Server()createServer();
}
}

问题十:socket客户端如何连接服务器端 import java;
import javalang;
import javaio;
public class MySocketServer
{

public static void main(String args[]) throws IOException
{
try{
ServerSocket myServer = new ServerSocket(8018);
Systemoutprintln(正在监听端口:+myServergetLocalPort());
Socket myClient = null;

boolean flag = true;
String InputMessage = null;
int c;
while(flag)
{
myClient = myServeraccept();
接收客户端的信息,如果不是Stop就继续监听,加个if判断
DataInputStream dataIn = new DataInputStream(myClientgetInputStream());
DataInputStream dataIn = new DataInputStream(new BufferedInputStream(myClientgetInputStream()));
OutputStream dataOut = myClientgetOutputStream();

while( (InputMessage = dataInreadLine()) != null )
{
if( InputMessageequals(stop))
{
flag = false;
break;
}
else
{
Systemoutprintln(从客户端接收到的信息是:+InputMessage);
输入:读取至 末尾-1结束,遇到回车'\n'结束:
while((c=Systeminread())!= -1)
{
dataOutwrite((byte)c);
if( c== '\n')
{
dataOutflush();
>>


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/13393692.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-27
下一篇 2023-07-27

发表评论

登录后才能评论

评论列表(0条)

保存