· [Java论坛][安全论坛][数据库论坛][操作系统论坛]
· [专题] IBM Rational高峰论坛 Windows 7十大功能
· [专题] 史上就危险7月 微软 BizSpark 计划介绍
· [IT技术周刊][IT资源下载专区][病毒求助专区]
· [热点] 我也能做CTO_赛迪连载 赛迪七夕特别行动
· [热点] Chrome 4.0采用V8引擎 Java开发编程规范

初学入门:基于Socket的Java网络编程集粹

发布时间:2007.12.13 05:04     来源:赛迪网    作者:执木

其实,简单的分析一下,就可以看出客户和服务通讯的主要通道就是Socket本身,而服务器通过accept方法就是同意和客户建立通讯.这样当客户建立Socket的同时。服务器也会使用这一根连线来先后通讯,那么既然如此只要我们存在多条连线就可以了。那么我们的程序可以变为如下:
那么下面的问题是如何使用线程.首先要做的事情是创建线程并使得其可以和网络连线取得联系。然后由线程来执行刚才的操作,要创建线程要么直接继承Thread要么实现Runnable接口,要建立和Socket的联系只要传递引用就可以了.而要执行线程就必须重写run方法,而run方法所做的事情就是刚才单线程版本main所做的事情,因此我们的程序变成了这样:


import java.net.*;
  import java.io.*;

  public class MultiUser extends Thread{
  private Socket client;

  public MultiUser(Socket c){
  this.client=c;
  }

  public void run(){
  try{
   BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
   PrintWriter out=new PrintWriter(client.getOutputStream());
   //Mutil User but can parallel
   while(true){
    String str=in.readLine();
    System.out.println(str);
    out.println("has receive....");
    out.flush();
    if(str.equals("end"))
     break;
   }
   client.close();
  }catch(IOException ex){
  }finally{
  }
  }

  public static void main(String[] args)throws IOException{
  ServerSocket server=new ServerSocket(5678);
  while(true){
  //transfer location change Single User or Multi User
  MultiUser mu=new MultiUser(server.accept());
  mu.start();
  }
  }
  }

 

客户端代码:

import Java.net.*;
import Java.io.*;

public class Client{
static Socket Server;

public static void main(String[] args) throws Exception
{
Server=new Socket (InetAddress.getLocalHost(),5678);
BufferedReader in=new BufferedReader(new InputStreamReader(Server.getInputStream()));
PrintWriter out=new PrintWriter(Server.getOutputStream());
BufferedReader wt=new BufferedReader(new InputStreamReader(System.in));
while(true)
{
String str=wt.readLine();
out.println(str);
out.flush();
if(str.equals("end"))
{
break;
}
System.out.println(in.readLine());
}
Server.close();
}
}

这段程序是接受客户的键盘输入,并把信息输出到服务端。并把"end"作为退出的命令

以上程序完成了两台计算机的简单通信。

   (责任编辑:包春林)


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· PL/SQL Developer 7.0安装程序 (12-11) · Java GPS Map应用工具GPSylon (12-11)
· 保存Java程序状态及设置之对象序列化 (12-11) · 新手入门--改进JAVA字符串分解的方法 (12-11)
· Java虚拟机类装载--原理、实现与应用 (12-11) · Static和Final修饰类属性变量及初始化 (12-11)
· 关于提高自己JAVA水平的十大技术讨论 (12-11) · Java基础知识:你是否了解KVM的常量池 (12-11)
· 基础:深入解析Java的新特性assertion (12-11) · 编程基础:深入分析Java中的数据结构 (12-11)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
资讯 通信 IT产品 IT技术 信息化
专题:谷歌发布PC操作系统Chrome OS
·芯能量 新动力 兴经济:..
·专题:英特尔与AMD和解 ..
·专题:惠普27亿收购3Com..
专题:
·专题:诺基亚危局已现 ..
·六股势力角逐4G标准 中..
·专题:联通iPhone并不贵..
 
·惠普123459黑白激打家族..
·云计算格局初现 三大阵..
·分析:虚拟化在高性能计..
2009 IBM动态架构新动力论坛
·直播:第八届中国系统与..
·专题:置身智慧海洋——..
·专题:让物品开口说话 ..