工具软件   办公软件   操作系统   网络安全   设计在线   程序开发   教程宝典   软件下载   软件论坛
您的位置:软件 > 开发者网络 > 开发工具 > Java > 正文
使用Java编写网络通信程序
[文章信息]
作者:张烨
时间:2004-08-20
出处:ahcit
责任编辑:方舟
[文章导读]
本文阐述了使用JAVA编程语言对基于客户/服务器模式的应用编写网络通信程序
advertisement
热点推荐
· 禁止QQ登录的方法
· 给你的XML文件做个数字签名
· ImageReady制作“焰火”小动画
· Java加密和数字签名编程快速入门
· 在VB6中用命令行为模式控制GUI动作
[正文]

上一页  1 2 3 4 5  下一页

  客户机/服务器通信的实现:

  (1) Application 同 Applet 的通信

  两端通过Socket机制进行连接:

  1) 客户端的编程流程:

  i、打开Socket,新建一个套接字;

  ii、为套接字建立一个输入和输出流;

  iii、根据服务器协议从套接字读入或向套接字写入;

  iiii、清除套接字和输入/输出流;

  2)服务器端的编程流程:

   打开Server Socket,创建一个服务器型套接字和一个普通套接字,服务器型套接字在指定端口为客户端请求的Socket 服务;

  i、使用ServerSocket类的accept()方法使服务器型套接字处于监听状态并把监听结果返回给普通套接字;

  ii、为该普通套接字创建输入和输出流;

  iii、从输入和输出流中读入或写入字节流,进行相应的处理,并将结果返回给客户端;

  iiii、在客户端和服务器工作结束后关闭所有的对象,如服务器型的套接字,普通套接字,输入和输出流。

  正是由于Java系统具有基于Socket的灵活通信机制,因而其应用程序能自由地打开和访问网络上的对象,就象在本地文件系统中一样。

  (2) Applet之间的通信:

  Applet之间的通信使用Applet Context类的getApplet()方法。

<applet code=applet1.class width=200 height=200 name=first>

  只要在程序中加入
Applet oneapplet=getAppletContext().getApplet("first");便可使用name为first的Applet中的方法了。
在该课题中大量使用了该种通信方法,因为专门同服务器端通信的 Applet中包含接收信息方法和发送信息方法,所有客户端的Applet都要使用负责通信的Applet中的方法,所以客户端的Applet同负责通信的Applet必须进行通信。

  程序

//服务器端程序S.java 负责与客户端通信
import java.io.*;
import java.net.*;
import java.lang.*;
import T2;

class ThreadEchoHandler extends Thread //创建线程
{
 T2 theT2=new T2();

 Socket incoming;
 int counter;

 ThreadEchoHandler(Socket i,int c)
 {
  incoming=i;
  counter=c;
 }

 public void run()
 {
  try
  {
   DataInputStream in=new DataInputStream(incoming.getInputStream());
   DataOutputStream out=new DataOutputStream(incoming.getOutputStream());
   System.out.println ("hello");
   boolean done=false;

   while(!done)
   {
    String aa="";
    String str=in.readUTF(); //从客户端得到字符串

    //在此加入各自的服务程序

    System.out.println (str);
    theT2.pass(str); //解码
    theT2.tongji(); //修改监控库中的信息

    aa=theT2.guan(); //操纵数据库
    System.out.println ("string z is:"+aa);

    if(aa.compareTo("null")!=0 )
    //若是查询数据库,返回查询后的结果
    {
     //若不是查询数据库,不向客户端输出信息
     out.writeUTF(aa);
     out.flush();
    }
   }//while

   incoming.close(); //线程关闭
  }//try
  catch(IOException e)
  {System.out.println(e);}
 }//end run
}

//----------------------------------------
class S
{
 public static void main(String[] args)
 {
  int i=1;
  try
  {
   ServerSocket s=new ServerSocket(1111);
   for(;;)
   {
    Socket incoming=s.accept();
    System.out.println("connect: "+i);
    new ThreadEchoHandler(incoming,i).start();
    i++;
   }
  }
  catch(Exception e)
  { System.out.println(e); }
 }
}

//客户端通信小应用程序 Echo.java

import java.io.*;
import java.net.*;
import java.awt.*;
import java.applet.*;

public class Echo extends Applet
{
 TextArea ta;
 Socket echoSocket;
 DataOutputStream os;
 DataInputStream is;
 String Line;

 public void init()
 {
  setBackground(Color.white);
  ta=new TextArea(5,80);
  ta.setEditable(false);
  add(ta);
  try
  {
   echoSocket=new Socket("10.102.4.41",1111);} //与服务器建立连接
   catch(IOException e)
   {System.out.println("error");}
  }
  public void st(String stri) //发送字符串的方法
  { 
   try
   {
    DataOutputStream os=new DataOutputStream(echoSocket.getOutputStream());
    DataInputStream is=new DataInputStream(echoSocket.getInputStream());
    os.writeUTF(""+ stri ); //向服务器输送string
    os.flush();
   }
   catch(IOException e)
   {System.out.println(" error:"+e); }
  }

  public String st1() //接收字符串的方法
  {
   String Line="";
   try
   {
    DataOutputStream os=new DataOutputStream(echoSocket.getOutputStream());
    DataInputStream is=new DataInputStream(echoSocket.getInputStream());
    Line=is.readUTF(); //从服务器读来的信息
    ta.appendText(""+Line); //在文本域中输出信息
   }
   catch(IOException e)
   {
    System.out.println(" error:"+e);
   }
   return Line;
  }
 }


上一页  1 2 3 4 5  下一页

发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容焦点新闻
  • JBuilder 9.0开发实用技巧七招
  • 超越梦想 EJB 3.0规范全新体验
  • J2EE应用程序的Web层状态复制
  • JDK Observer设计模式之研究
  • 用Java实现基于XML的购物车
  • 民营家电商排队造手机 设备商全面杀入
  • 英特尔澄清杨旭任职传闻 官方没宣布此消息
  • 国资委河北密制联通拆分方案
  • 垃圾邮件害人害企害国 清除垃圾邮件不手软
  • 中兴携手阿尔卡特 全球逐鹿CDMA
  • 用友总裁王文京:誓将ERP变成“大众消费”
  • 香港消费者委员会:数码相机最贵未必最好
  • 外电称中兴正评估西门子手机业务 或能并购
  • Advertisement