java

位置:IT落伍者 >> java >> 浏览文章

利用Socket进行Java网络编程(二)


发布日期:2023年01月07日
 
利用Socket进行Java网络编程(二)

作者 郗旻

建立客户端代码

相比服务器端客户端要简单一些客户端只需用服务器所在机器的ip以及服务器的端口作为参数创建一个Socket对象得到这个对象后就可以用建立服务器部分介绍的方法实现数据的输入和输出

Socket socket = new Socket();

in = new BufferedReader(new InputStreamReader(socketgetInputStream()));

out = new PrintWriter(socketgetOutputStream()true);

以上的程序代码建立了一个Socket对象这个对象连接到ip地址为的主机上端口为的服务器对象并且建立了输入流和输出流分别对应服务器的输出和客户端的写入

建立用户界面

读者可以根据自己的喜好建立自己的用户界面这不是本文的重点

经过以上三个步骤就可以建立一个比较简单的对话程序但是为了使这个程序更加完善应进行以下几个改进

现在服务器只能服务一个客户也就是单线程的可以将它改进为多线程服务器

try

{ file://建立服务器

ServerSocket server = new ServerSocket();

int i=;

for(;;)

{

Socket incoming = serveraccept();

new ServerThread(incomingi)start();

i++;

}

}catch (IOException ex){ exprintStackTrace(); }

循环检测是否有客户连接到服务器上如果有则创建一个线程来服务这个客户这个线程的名称是ServerThread这个类扩展了Thread类它的编写方法与前述的服务器的写法相同

为了可以随时得到对方传送过来的消息可以在服务器以及客户端各建立一个独立的线程来察看输入流如果输入流中有输入则可以即时显示出来代码如下

new Thread()

{

public void run()

{

try

{

while(true)

{

checkInput();

sleep();//每毫秒检测一次

}

}catch(InterruptedException ex)

{

}catch(IOException ex)

{

}

}

}start();

其中的checkInput()方法为

private void checkInput() throws IOException

{

String line;

if((line=inreadLine())!=null) file://检测输入流中是否有新的数据

tsetPartner(line); file://将数据流中的消息显示出来

}

通过以上改进程序就可以比较好的运行了

上一篇:Java网络编程之URI、URL研究专题六

下一篇:Java获取客户端真实IP地址的两种方法