科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Java实现网络通信(1)

Java实现网络通信(1)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

Java实现网络通信(1)

作者:freeyia 来源:赛迪网技术社区 2007年12月1日

关键字: java 网络通信

  • 评论
  • 分享微博
  • 分享邮件
Copy code
//服务端程序 2!{$4NX7  
import java.io.*; @?vXu.{  
import java.net.*; V(-X> c)  
public class MyServer $*%z+  
{ _L\%rGK  
  public static void main(String[] args) throws IOException HGU\nnnD\E  
  { &P paM &  
    ServerSocket server=new ServerSocket(5678); &JP/I{9C0  
    Socket client=server.accept(); G7iJ,i;e  
    BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream())); =1KT461#W  
    PrintWriter out=new PrintWriter(client.getOutputStream()); )[$}P$; 5k  
    while(true) Qy <n1[  
    { ?13`RgJ>/  
      String str=in.readLine(); oW(bKe  
      System.out.println(str); `^;rp`rl  
      out.println("has receive...."); 4!') uy  
      out.flush(); cwQ6GSzx1  
      if(str.equals("end")) ={0av:|K\V  
      break; j{zbLD^3  
    } Ss C{RCqo  
  client.close(); v;pZ1e$  
} wL7SUw=c  
} LGnHw6_  
'/>L,~`B{O  
//客户端程序 x 5frm=[0  
import java.net.*; kPz9Pm!a  
import java.io.*; sHN^E^qs)  
5(n}f f%  
public class Client |IgS&  
{ /[*/I@eH  
static Socket server; hX;m=<YD  
public static void main(String[] args)throws Exception Gb3YJ+F  
{ daQLl-JI  
    server=new Socket(InetAddress.getLocalHost(),5678); ':Y<Q[UlA  
    BufferedReader in=new BufferedReader(new InputStreamReader(server.getInputStream())); BtRmX8-  
    PrintWriter out=new PrintWriter(server.getOutputStream()); C{QN~Ug q  
    BufferedReader wt=new BufferedReader(new InputStreamReader(System.in)); >M.p3SnX  
    while(true) q$53).wA  
    { Wg\U9O^rE  
    String str=wt.readLine(); Pd#'9T6I  
    out.println(str); Gi8u5Vp [  
    out.flush(); Z8Op 8B  
    if(str.equals("end")) I&&,6ii/  
    { E:HGC!xX  
        break; E&m R@  
    } 2],YT/ r  
    System.out.println(in.readLine()); ,`WbS]Y4L  
    } e`y Hu  
  server.close(); ??PXg  
} *yaK<nG7Cn  
} ^Q6e$6c  
18ur }/  
客户机代码则是接受客户键盘输入,并把该信息输出,然后输出"End"用来做退出标识。 x8hkdCl}3  
这个程序只是简单的两台计算机之间的通讯,如果是多个客户同时访问一个服务器呢? }H<4mY >  
你可以试着再运行一个客户端,结果是会抛出异常的。那么多个客户端如何实现呢? ={K#)C:M  
x%.Pzs@  
简单的分析一下,就可以看出客户和服务通讯的主要通道就是Socket本身,而服务器通过 jgKN}v/\  
accept方法就是同意和客户建立通讯.这样当客户建立Socket的同时。服务器也会使用这一根 ~v0n?e  
连线来先后通讯,那么既然如此只要我们存在多条连线就可以了。那么我们的程序可以变为如下: f1Er6\?&^X  
Copy code
import java.io.*; cHJ]ih{MB  
import java.net.*; xg;$U&r  
bzMt&X:w  
public class MyServer ObUnf`  
{ m0X"+ #'bs  
  public static void main(String[] args) throws IOException V!1h yK  
  { f7*yK ]G  
    ServerSocket server=new ServerSocket(5678); fs<h#8m  
    while(true) hl c5]T  
    { 0f.q 8Y^2%  
        Socket client=server.accept(); V 0wbTgI  
        BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream())); TzU*[v!3  
        PrintWriter out=new PrintWriter(client.getOutputStream()); X !dm;  
        while(true) `KPTs  
        { cQZs|NE&  
          String str=in.readLine(); q q,]5Uh0  
          System.out.println(str); nm+LRtK,J  
          out.println("has receive...."); xETDM%tZ   
          out.flush(); gM[;91"$  
          if(str.equals("end")) qZq+ =4fp  
          break; C|m<f`vX  
        } O=gHp ^  
        client.close(); UqFxu+QD  
    } iSC)G a  
  } :1]t:DQa  
} Ss /hBj  
4*+-FzsrDB  
这里仅仅只是加了一个外层的While循环,这个循环的目的就是当一个客户进来就为它分配一个 uoHv{zi  
Socket直到这个客户完成一次和服务器的交互,这里也就是接受到客户的"End"消息.那么现在就 ?Q>;l)'  
实现了多客户之间的交互了。但是.问题又来了,这样做虽然解决了多客户,可是是排队执行的。 X6={>)>d  
也就是说当一个客户和服务器完成一次通讯之后下一个客户才可以进来和服务器交互,无法做到同时服务
 
 
 
查看本文来源
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章