24小时热门版块排行榜    

查看: 798  |  回复: 1

wyw20123wyw

新虫 (初入文坛)

[求助] JAVA socket 通信时接收不到数据(和别的语言编写的socket程序通信)

我在网上下载了一个java编写的服务器端和客户端程序,服务器端和客户端可以实现数据的收发,但是我只开启服务器端,与别的客户端(如C#、C++build编写)通信时,建立l连接后,可以发送数据,但是接收不到;或者反过来,启动别的语言编写的服务器端、java编写的客户端,也是能发不能收,不知道问题会出在哪,求高手指点。
界面代码:
CODE:
package nupt.java.socket;
import java.awt.*;
import java.awt.event.*;
//import java.io.*;
public class Face extends Frame {
       
      private static final long serialVersionUID = 1L;
    Button clientBtn, serverBtn;
    TextArea ta;
    TextField tfaddress, tfport, tftype;
    Label lbl1,lbl2,lbl3;
    int port;
    Client client;
    Server server;
    boolean iamserver;
    static Face frm;
    public Face() {
          // 实例化组件
        clientBtn = new Button("客户端");
        serverBtn = new Button("服务器");
        ta = new TextArea("", 10, 50, TextArea.SCROLLBARS_BOTH);
        lbl1 = new Label("IP地址:");
        tfaddress = new TextField("172.16.57.156", 10);
        lbl2 = new Label("端口:");
        tfport = new TextField("8080");
        lbl3 = new Label("发送内容:");
        tftype = new TextField(40);
        tftype.addKeyListener(new TFListener());
        ta.setEditable(false);
        //向容器中加入以上组件
        setLayout(new   FlowLayout());
        add(lbl1);
        add(tfaddress);
        add(lbl2);
        add(tfport);
        add(clientBtn);
        add(serverBtn);
        add(ta);
        add(lbl3);
        add(tftype);
        //设置格式
        setLocation(400, 250);                //窗口显示再屏幕的位置坐标
        setSize(400, 300);                      //设置窗体大小
        setTitle("基于Socket和多线程编程的通信程序");
        this.setVisible(true);                   //设置窗体可见
        //事件响应
        clientBtn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                port = Integer.parseInt(tfport.getText());
                client = new Client(tfaddress.getText(), port, frm);
                client.start();
                tfaddress.setEnabled(false);
                tfport.setEnabled(false);
                serverBtn.setEnabled(false);
                clientBtn.setEnabled(false);
            }
        });
        serverBtn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                port = Integer.parseInt(tfport.getText());
                server = new Server(port, frm);
                server.start();
                iamserver = true;
                tfaddress.setText("成为服务器");
                tfaddress.setEnabled(false);
                tfport.setEnabled(false);
                serverBtn.setEnabled(false);
                clientBtn.setEnabled(false);
            }
        });
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
      public static void main(String[] args) {        //主方法
             // TODO Auto-generated method stub
            
             frm = new Face();
      }
      private class TFListener implements KeyListener {
        public void keyPressed(KeyEvent e) {
          if (e.getKeyCode() == KeyEvent.VK_ENTER) { //按Enter输出显示聊天内容
                ta.append("发送信息: " + tftype.getText() + "\n");
                //ps.println(tftype.getText());
                if (iamserver)
               
                    server.dataout(tftype.getText());
                else
                    client.dataout(tftype.getText());
               
                tftype.setText("");
            }
        }
        public void keyTyped(KeyEvent e) {
        }
        public void keyReleased(KeyEvent e) {
        }
    }
}
服务器端代码:

package nupt.java.socket;
import java.awt.*;
import java.net.*;
import java.io.*;
public class Server extends Thread {
        ServerSocket skt;   // ServerSocket类监听进入的连接,为每个新的连接产生一个Socket对象      
    Socket Client[ ]=new Socket[10];
    Socket Client1=null;
    int i = 0;
    TextArea in;
    int port,k=0,l=0;
    PrintStream ps;
    Face chat;
    public Server(int port, Face chat) {
        try {
            this.port = port;
            skt = new ServerSocket(port);
            this.chat = chat;
        } catch (IOException e) {
            chat.ta.append(e.toString());
        }
    }
    public void run() {
        chat.ta.append("等待连线......");
        while (true) {
            try {
            Client[k] = skt.accept();//当有客户端连接时就新建一个子线程
         
            if (i < 2) {
              ServerThread server[] = new ServerThread[10];
              server[k]= new ServerThread(Client[k], this.chat, i);
                 l=server.length;
                 server[k].start();
                chat.ta.append("客户端"+ Client[k].getInetAddress() + "已连线\n");
               
                //for(int j=0;j<server.length;j++)
               
                ps = new PrintStream(server[k].getClient().getOutputStream());
                i = server[k].getI();
                k++;
            } else {
                //theOutputStream = new PrintStream(null);
            }
        } catch (SocketException e) {
            } catch (IOException e) {
                chat.ta.append(e.toString());
            }
        }
    }
    public void dataout(String data) {
        //for(int j=0;j<l;j++)
        ps.println(data);
    }
}
class ServerThread extends Thread {
    ServerSocket skt;
    Socket Client;
    TextArea in;
    int port,i;
    BufferedReader theInputStream;
    PrintStream ps;
    String readin;
    Face chat;
//服务端子线程
    public ServerThread(Socket s, Face chat, int i) {
        this.i = ++i;
        Client = s;
        this.chat = chat;
    }
    public int getI() {
        return this.i;
    }
    public Socket getClient() {
        return this.Client;
    }
    public void run() {
          try {
            theInputStream = new BufferedReader(new InputStreamReader(Client
                    .getInputStream()));
            ps = new PrintStream(Client.getOutputStream(),true);
            
            while (true) {
                    readin = theInputStream.readLine();
                     //System.out.println("可以接收吗??");
                chat.ta.append("收到信息: "+readin+"\r\n");
               
      
            }
        } catch (SocketException e) {
            chat.ta.append("连线中断!\n");
                           // 设置组件可用性
            chat.clientBtn.setEnabled(true);
            chat.serverBtn.setEnabled(true);
            chat.tfaddress.setEnabled(true);
            chat.tfport.setEnabled(true);
            try {
                i--;
                skt.close();
                Client.close();
            } catch (IOException err) {
                chat.ta.append(err.toString());
            }
        } catch (IOException e) {
            chat.ta.append(e.toString());
        }
    }
    public void dataout(String data) {
        ps.println(data);
        //ps.flush();
    }
}
客户端代码:

package nupt.java.socket;
import java.net.*;
import java.io.*;

//import javax.swing.Timer;
public class Client extends Thread {
      Socket skt;                                  // 用于客户端的连接
    InetAddress host;                        // 主机地址
    int port;                                     // 端口号
    BufferedReader theInputStream;
    PrintStream ps;
    String readin;
    Face chat;
    public Client(String ip, int p, Face chat) {
        try {
            host = InetAddress.getByName(ip);            // 获取IP地址
            port = p;                                                  // 获取端口号
            this.chat = chat;
        } catch (IOException e) {
            chat.ta.append(e.toString());
        }
    }
    public void run() {
        try {
            chat.ta.append("准备连线,稍后!");
            skt = new Socket(host, port);                     // 新建Socket对象
            chat.ta.append("成功\n");                   // 缓冲区末尾添加字符串
            ps = new PrintStream(skt.getOutputStream(),true);
         
            theInputStream = new BufferedReader(new InputStreamReader(skt.getInputStream()));
         
            while (true) {
                     readin = theInputStream.readLine();
                     //System.out.println("可以接收吗??");
                chat.ta.append("收到信息: "+readin+"\r\n");
              
               
            }
        } catch (SocketException e) {
            chat.ta.append("未连上!\n");
            chat.clientBtn.setEnabled(true);
            chat.serverBtn.setEnabled(true);
            chat.tfaddress.setEnabled(true);
            chat.tfport.setEnabled(true);
           try {
               skt.close();
           }
            catch (IOException e1) {
                chat.ta.append(e1.toString());
            }
        } catch (IOException e) {
            chat.ta.append(e.toString());
        }
    }
    public void dataout(String data) {
        ps.println(data);
        //ps.flush();
    }
}

[ Last edited by jjdg on 2013-11-24 at 02:29 ]
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wyw20123wyw

新虫 (初入文坛)

问题解决了,当在C#或者VB客户端输完字符时,敲下回车再发送,客户端就可以收到了;当服务器和客户端在不同的电脑上连接通信时,需要关闭服务器端的防火墙,否则端口不开放,连接不上
2楼2013-12-02 21:12:18
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 wyw20123wyw 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 304求调剂 +6 司空. 2026-03-18 6/300 2026-03-18 23:03 by 星空星月
[考研] 求材料调剂 +8 隔壁陈先生 2026-03-12 8/400 2026-03-18 22:19 by li123456789.
[考研] 321求调剂 +3 何润采123 2026-03-18 3/150 2026-03-18 21:27 by li123456789.
[考研] 材料与化工一志愿南昌大学327求调剂推荐 +8 Ncdx123456 2026-03-13 9/450 2026-03-18 14:40 by haxia
[考研] 0703化学求调剂 总分331 +3 ZY-05 2026-03-13 3/150 2026-03-18 10:58 by macy2011
[考研] 材料与化工求调剂 +6 为学666 2026-03-16 6/300 2026-03-17 20:15 by peike
[考研] 308求调剂 +4 是Lupa啊 2026-03-16 4/200 2026-03-17 17:12 by ruiyingmiao
[考研] 332求调剂 +6 Zz版 2026-03-13 6/300 2026-03-17 17:03 by ruiyingmiao
[考研] 26考研求调剂 +6 丶宏Sir 2026-03-13 6/300 2026-03-17 16:13 by 醉在风里
[考博] 26申博 +4 八旬速览 2026-03-16 4/200 2026-03-17 13:00 by 轻松不少随
[考研] 278求调剂 +3 Yy7400 2026-03-13 3/150 2026-03-17 08:24 by laoshidan
[考研] 304求调剂 +5 素年祭语 2026-03-15 5/250 2026-03-16 17:00 by 我的船我的海
[考研] 326求调剂 +3 mlpqaz03 2026-03-15 3/150 2026-03-16 07:33 by Iveryant
[考研] 327求调剂 +6 拾光任染 2026-03-15 11/550 2026-03-15 22:47 by 拾光任染
[考研] 0856专硕279求调剂 +5 加油加油!? 2026-03-15 5/250 2026-03-15 11:58 by 2020015
[考研] 材料工程调剂 +9 咪咪空空 2026-03-12 9/450 2026-03-13 22:05 by 星空星月
[考研] 求调剂 +5 一定有学上- 2026-03-12 5/250 2026-03-13 18:31 by ms629
[考研] 一志愿211化学学硕310分求调剂 +8 努力奋斗112 2026-03-12 9/450 2026-03-13 15:41 by JourneyLucky
[论文投稿] 投稿问题 5+4 星光灿烂xt 2026-03-12 6/300 2026-03-13 14:17 by god_tian
[考研] 0817化学工程与技术考研312分调剂 +3 T123 tt 2026-03-12 3/150 2026-03-13 10:49 by houyaoxu
信息提示
请填处理意见