我编了个简单的局域网聊天小工具但是有些问题无法解决求教

ztc86472238 ztc86472238 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
程序思想:一个客户端,一个服务端。 服务端用server socket用语接收客户端的连接 然后在服务端的GUI上可以让用户输入端口号 然后server socket监听端口 同理 客户端的socket 通过同样的端口 搜寻服务器端的IP地址连接 两个都在侦听/连接时 成功然后可以进行聊天。可是程序昨晚以后 我只能够在我电脑上同时运行两个程序 地址是127.0.0.1 或者本机的IP地址可以进行通讯 在两台机子上就是连不起来。等待时间过长,不知道为什么。 所以求教 一下是我的程序代码:
服务器端:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.net.*;

public class Server extends JFrame implements ActionListener{
JPanel contentPane;
JLabel jLabel2 = new JLabel();
JTextField jTextField2 = new JTextField("4700");
JButton jButton1 = new JButton();
JLabel jLabel3 = new JLabel();
JTextField jTextField3 = new JTextField();
JButton jButton2 = new JButton();
JScrollPane jScrollPane1 = new JScrollPane();
JTextArea jTextArea1 = new JTextArea();
ServerSocket server = null;
Socket socket = null;BufferedReader instr =null;PrintWriter os=null ;

public Server() {
NetChat();

}

private void NetChat() {
contentPane = (JPanel) this.getContentPane();
contentPane.setLayout(null);
this.setSize(new Dimension(540, 340));
this.setTitle("服务器");
jLabel2.setBounds(new Rectangle(22, 27, 72, 28));
jLabel2.setText("端口号");
jLabel2.setFont(new java.awt.Font("宋体", 0, 14));
jTextField2.setBounds(new Rectangle(113, 27, 315, 24));

jButton1.setBounds(new Rectangle(440, 28, 73, 25));
jButton1.setFont(new java.awt.Font("Dialog", 0, 14));
jButton1.setBorder(BorderFactory.createEtchedBorder());
jButton1.setActionCommand("jButton1");
jButton1.setText("侦听");
jLabel3.setBounds(new Rectangle(23, 57, 87, 28));
jLabel3.setText("请输入信息");
jLabel3.setFont(new java.awt.Font("宋体", 0, 14));
jTextField3.setBounds(new Rectangle(114, 60, 314, 24));
jTextField3.setText("");
jButton2.setText("发送");
jButton2.setActionCommand("jButton1");
jButton2.setBorder(BorderFactory.createEtchedBorder());
jButton2.setFont(new java.awt.Font("Dialog", 0, 14));
jButton2.setBounds(new Rectangle(440, 58, 73, 25));
jScrollPane1.setBounds(new Rectangle(23, 92, 493, 189));

contentPane.add(jTextField2, null);
contentPane.add(jButton1, null);
contentPane.add(jLabel3, null);
contentPane.add(jTextField3, null);
contentPane.add(jButton2, null);
contentPane.add(jScrollPane1, null);
contentPane.add(jLabel2, null);
jScrollPane1.getViewport().add(jTextArea1, null);
jButton1.addActionListener(this);
jButton2.addActionListener(this);
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
try{
socket.close();
instr.close();
System.exit(0);
}catch(Exception ex){
}
}
});
}

class MyThread extends Thread{
public void run(){
try{
while(true){
this.sleep(100);
instr= new BufferedReader(new InputStreamReader(socket.getInputStream()));
if(instr.ready()){
jTextArea1.append("客户端: "+instr.readLine()+"\n");
}
}
}catch(Exception ex){}
}
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==jButton1){
int port=Integer.parseInt(jTextField2.getText().trim());
listenClient(port);
}
if(e.getSource()==jButton2){
String s=this.jTextField3.getText().trim();
sendData(s);
}
}

private void listenClient(int port){
try{
if(jButton1.getText().trim().equals("侦听")){
server = new ServerSocket(port);
jButton1.setText("正在侦听...");
socket=server.accept();
sendData("已经成功连接。。。");
jButton1.setText("正在聊天...");
jTextArea1.append("客户端已经连接到服务器\n");
MyThread t=new MyThread();
t.start();
}

}catch(Exception ex){
}
}
private void sendData(String s){
try{
os= new PrintWriter(socket.getOutputStream());
os.println(s);
os.flush();
if(!s.equals("已经成功连接。。。"))
this.jTextArea1.append("Server:"+s+"\n");
}catch(Exception ex){
}
}



public static void main(String arg[]){
JFrame.setDefaultLookAndFeelDecorated(true);
Server frm=new Server();
frm.setVisible(true);

}
}

客户端:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.net.*;
public class Client extends JFrame implements ActionListener{
JPanel contentPane;
JLabel jLabel1 = new JLabel();
JTextField jTextField1 = new JTextField("127.0.0.1");
JLabel jLabel2 = new JLabel();
JTextField jTextField2 = new JTextField("4700");
JButton jButton1 = new JButton();
JLabel jLabel3 = new JLabel();
JTextField jTextField3 = new JTextField();
JButton jButton2 = new JButton();
JScrollPane jScrollPane1 = new JScrollPane();
JTextArea jTextArea1 = new JTextArea();
BufferedReader instr =null;
Socket socket = null;
PrintWriter os=null;
public Client() {
NetChat();
}

private void NetChat() {
contentPane = (JPanel) this.getContentPane();
jLabel1.setFont(new java.awt.Font("宋体", 0, 14));
jLabel1.setText("服务器名称");
jLabel1.setBounds(new Rectangle(20, 22, 87, 28));
contentPane.setLayout(null);
this.setSize(new Dimension(540, 340));
this.setTitle("客户端");

jTextField1.setBounds(new Rectangle(114, 26, 108, 24));
jLabel2.setBounds(new Rectangle(250, 25, 72, 28));
jLabel2.setText("端口号");
jLabel2.setFont(new java.awt.Font("宋体", 0, 14));
jTextField2.setBounds(new Rectangle(320, 27, 108, 24));

jButton1.setBounds(new Rectangle(440, 28, 73, 25));
jButton1.setFont(new java.awt.Font("Dialog", 0, 14));
jButton1.setBorder(BorderFactory.createEtchedBorder());
jButton1.setActionCommand("jButton1");
jButton1.setText("连接");
jLabel3.setBounds(new Rectangle(23, 57, 87, 28));
jLabel3.setText("请输入信息");
jLabel3.setFont(new java.awt.Font("宋体", 0, 14));
jTextField3.setBounds(new Rectangle(114, 60, 314, 24));

jButton2.setText("发送");
jButton2.setActionCommand("jButton1");
jButton2.setBorder(BorderFactory.createEtchedBorder());
jButton2.setFont(new java.awt.Font("Dialog", 0, 14));
jButton2.setBounds(new Rectangle(440, 58, 73, 25));
jScrollPane1.setBounds(new Rectangle(23, 92, 493, 189));

contentPane.add(jLabel1, null);
contentPane.add(jTextField1, null);
contentPane.add(jLabel2, null);
contentPane.add(jTextField2, null);
contentPane.add(jButton1, null);
contentPane.add(jLabel3, null);
contentPane.add(jTextField3, null);
contentPane.add(jButton2, null);
contentPane.add(jScrollPane1, null);
jScrollPane1.getViewport().add(jTextArea1, null);
jButton1.addActionListener(this);
jButton2.addActionListener(this);
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
try{
socket.close();instr.close();os.close();System.exit(0);
}catch(Exception ex){
}

}
});
}
class MyThread extends Thread{
public void run(){
try{
os=new PrintWriter(socket.getOutputStream());
instr=new BufferedReader(new InputStreamReader(socket.getInputStream()));
while(true){
this.sleep(100);
if(instr.ready()){
jTextArea1.append("服务器: "
+instr.readLine()+"\n");
}
}
}catch(Exception ex){
}

}
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==jButton1){
String ip=jTextField3.getText().trim();
int port=Integer.parseInt(jTextField2.getText().trim());
connectServer(ip,port);
}
if(e.getSource()==jButton2){
String s=this.jTextField3.getText().trim();
sendData(s);
}
}
private void connectServer(String ip,int port){

try{
if(jButton1.getText().trim().equals("连接")){
jButton1.setText("连接服务器...");
socket=new Socket(ip,port);
jButton1.setText("正在聊天");

MyThread t=new MyThread();
t.start();
}
}catch(Exception ex){
}
}
private void sendData(String s){
try{
os = new PrintWriter(socket.getOutputStream());
os.println(s);
os.flush();
this.jTextArea1.append("Server:"+s+"\n");

}catch(Exception ex){
}
}

public static void main(String arg[]){
JFrame.setDefaultLookAndFeelDecorated(true);
Client frm=new Client();
frm.setVisible(true);
}
}
...全文

相关推荐

基于c# socket udp的简单的局域网聊天软件 含源码

该项目是一个基于C# Socket UDP协议实现的简单局域网聊天软件,支持主机发现、用户状态管理和消息传输。核心功能包括通过Ping扫描识别在线主机、维护局域网用户列表及通信状态,并利用UDP进行轻

yyl8781697

解决局域网访问Dify却仅显示nginx页面的问题

默认配置的dify,本机可访问,局域网通过ip访问却只看到欢迎使用nginx的提示,如果访问服务器ip/apps则直接提示404 Not Found。这该如何解决呢?详细看文章里是如何解决这个问题的

sprlightning

webrtc实现局域网网页视频聊天

f由于项目有视频聊天的需求,在网上了解到谷歌开源的webrtc可以实现p2p的视频通信,参考了很多网上的资料,最终还是硬着头皮去webrtc官网,找到基于webrtc官网的demo,demo本身是基于本机的,源代码是模拟了两个pc来通信,要实现局域网两台设备建立webrtc连接,前提是双方拿到对方的sdp和icecandidate,彼此交换对方的这两个信息,就可以视频聊天了。 ...

robingdo

基于C#的简单的tcp同步编程 聊天小工具

本教程将深入探讨一个基于C#的简单TCP同步编程实现,用于构建一个局域网内的聊天小工具。TCP(传输控制协议)是一种面向连接、可靠的网络传输协议,为应用程序提供了数据流服务,保证了数据的顺序和完整性。

fengcanjiuduan

局域网聊天传文件的小工具

标题中的“局域网聊天传文件的小工具”指的是一个专门设计用于在局域网(Local Area Network,简称LAN)环境中实现即时通讯和文件传输的应用程序。

nipper3202004
评论 2
收藏 已收藏
分享
返回顶部
ztc86472238
Java SE 62,620 成员 307,251 内容