回 帖 发 新 帖 刷新版面

主题:求助!急!跪谢了!

大家好,我在写一个软件,下面是软件中的一部分,我把详细的说明,代码,出现的问题都写在下面了,希望朋友们能帮我看看到底是哪里出错了,跪谢了!!!

说明:此软件是简单的p2p软件,以下为方便,将作为服务端的peer称为服务端,将作为客户端的peer称为客户端。

环境:xp系统,jbuilder9

程序和控件的对应关系:
         按钮   开始运行        ---     jButton1   
         按钮   连接            ---     jButton6
         输入IP的地址框         ---     jTextField2
         显示IP的地方           ---     jLabel3


各个部件完成的功能是:
1.“开始运行”(jButton1):无论客户端还是服务端,在打开软件后,先点击此按钮,实现用套接字监听的功能。
2.“连接”(jButton6):若客户端想要请求服务端的服务,则在“IP地址框”(jTextField2)中输入服务端的IP地址,然后点击“连接”,完成客户端和服务端的套接字的连接建立。同时,在服务端的“IP”(jLabel3)处显示出客户端的IP地址。


[color=#FF0000]下面是我的程序中的代码:[/color]

package ceshi;

import javax.swing.*;
import com.borland.jbcl.layout.*;
import java.awt.*;
import java.awt.event.*;
import  java.net.*;
import  java.io.*;
import   java.util.*;

/**
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2009</p>
 * <p>Company: </p>
 * @author not attributable
 * @version 1.0
 */

public class Frame1 extends JFrame {
  XYLayout xYLayout1 = new XYLayout();
  JButton jButton1 = new JButton();
  JLabel jLabel4 = new JLabel();
  JLabel jLabel3 = new JLabel();
  JLabel jLabel2 = new JLabel();
  JTextField jTextField2 = new JTextField();
  JButton jButton6 = new JButton();

  public Frame1() {
    try {
      jbInit();
    }
    catch(Exception e) {
      e.printStackTrace();
    }
  }
  private void jbInit() throws Exception {
    jButton1.setFont(new java.awt.Font("Dialog", 0, 15));
    jButton1.setText("开始运行");
    this.setLocale(java.util.Locale.getDefault());
    this.getContentPane().setLayout(xYLayout1);
    jLabel4.setFont(new java.awt.Font("Dialog", 0, 15));
    jLabel4.setText("客户端:");
    jLabel3.setFont(new java.awt.Font("Dialog", 0, 15));
    jLabel3.setText("IP");
    jLabel2.setFont(new java.awt.Font("Dialog", 0, 15));
    jLabel2.setText("输入目标地址");
    jTextField2.setFont(new java.awt.Font("Dialog", 0, 15));
    jTextField2.setToolTipText("");
    jTextField2.setText("X.X.X.X");
    jButton6.setFont(new java.awt.Font("Dialog", 0, 15));
    jButton6.setText("连接");
    this.getContentPane().add(jButton1, new XYConstraints(30, 30, 120, 37));
    this.getContentPane().add(jLabel4, new XYConstraints(285, 232, 62, 41));
    this.getContentPane().add(jLabel3, new XYConstraints(356, 236, 161, 34));
    this.getContentPane().add(jTextField2, new XYConstraints(317, 329, 197, 41));
    this.getContentPane().add(jButton6,    new XYConstraints(378, 398, 92, 37));
    this.getContentPane().add(jLabel2, new XYConstraints(335, 281, 112, 41));
  }



//处理jFame关闭事件。
protected void processWindowEvent(WindowEvent e) {
    super.processWindowEvent(e);
    if (e.getID() == WindowEvent.WINDOW_CLOSING) {
      System.exit(0);
    }
 }



//已确定。
//以下程序是peer作为服务器监听情况下的代码,对应的事件是用户点击“开始运行”按钮。
//以下声明了一对类,Server和ServerThread。Server的main()方法创建了一个ServerSocket对象来监听端口6544上的连接请求,如果成功,
//Server进入一个无线循环中,交替调用ServerSocket的accept()方法来等待连接请求,同时启动后台线程处理连接,即accept()返回的请求。
//线程由ServerThread继承的start()方法开始,并执行ServerThread的run()方法中的代码。一旦run()方法运行,线程将创建BufferedReader
//对象以便数据传送。

class  Server
{
  public void static main () throws IOException {
    ServerSocket server= new ServerSocket(6544) ;  //建立一个server套接字,用来在6544号端口监听连接请求。
    while(true)
      {
        Socket s=server.accept();  //侦听从客户程序发来的连接请求,建立连接,返回一个套接字对象来表示这个链接。
       new ServerThread(s).start(); //开始一个线程来处理这个链接。
      }
  }
}

class ServerThread extends Thread
{
  Socket s;
  ServerThread(Socket s)
  {
    this.s=s;
  }

  public void run()
  {
    BufferedReader br=null;
    try
    {
      InputStreamReader isr = new InputStreamReader(s.getInputStream());  //建立一个input stream reader,和套接字的字节输入流相关。input stream reader把从套接字中读取的字节转化为字符。
      br = new BufferedReader(isr);  //建立一个缓冲,它和input stream reader 相关。但是可以方便的整行读取文件。
    }
    catch(IOException e)
    {
    }
  }
}  //"开始运行"按钮对应的服务器监听代码结束。




//已确定。
//以下是peer作为客户端去连接作为服务器的peer的程序。此段程序和软件中的“连接”按钮相对应。当客户端在textfield中输入了一个IP地址时,客户端先读取
//该IP地址的内容,然后通过套接字链接到对应的服务器端,此时客户端和服务器端将建立起socket连接。并且在服务器端的“jLabel3”中显示客户端的IP地址。
  void jButton6_actionPerformed(ActionEvent e) {
    try
      {
           TextField textField2 = new TextField();  //再次声明public class Frame1 extends JFrame 中定义的textField2。
           String   IpAddress   = textField2.getText();  //从textField2中读取服务端的IP地址。
           Socket c = new Socket(IpAddress,6544);   //建立和输入的IP地址相对应的服务端在端口6544上的连接。
          //以下程序用来在服务器端的“jLabel3”即“客户端IP”处显示连接上的客户端的IP地址。
           InetAddress ClientIp=InetAddress.getLocalHost();  //用ClientIp来保存客户端的IP地址。
           String ClientIpString=ClientIp.toString();  //将客户端的IP转换成字符串类型。
           StringTokenizer st = new StringTokenizer(ClientIpString, "/");
           String ip_address = null;
          while(st.hasMoreTokens())
               {
                    ip_address = st.nextToken();  //客户端的IP临时保存在ip_address变量中。
                    jLabel3.setText(ip_address);
               }
           DataOutputStream out = new DataOutputStream(c.getOutputStream());
           DataInputStream in = new DataInputStream(c.getInputStream());
           String Message ="";
          //for(int i=0;i<list1.getItemCount();i++)
           //{
            //  Message = Message+list1.getItem(i)+"*";
           //}
           Message =ip_address +"*"+ Message;
           out.writeUTF(Message);
           in.close();
           out.close();
           c.close();
      }
    catch (Exception c)
        {
           c.printStackTrace();  //错误处理。
        }
  }


}




[color=#FF0000]下面是运行时出现的问题:[/color]

"Frame1.java": <identifier> expected at line 82, column 15
"Frame1.java": '(' expected at line 90, column 1


完毕!

回复列表 (共1个回复)

沙发

深圳市华信群英科技有限公司与知名通信软件公司正式签订定向输送人才的合作协议
针对想进入IT软件行业的有志人士提供专业的企业内训
实训课程采用“2+3”分段教学模式,分为2个月理论强化和3个月项目实训两个阶段
实训前就签订就业安置协议,岗前实训后入职
不仅学费优惠而且是企业定向培训定向招聘,百分百保证就业
有意向请登录www.szctt.com,或加QQ:1179397962做详细咨询

我来回复

您尚未登录,请登录后再回复。点此登录或注册