问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何用C 做网络聊天程序

发布网友 发布时间:2022-06-15 01:13

我来回答

2个回答

热心网友 时间:2023-10-22 08:25

1.服务器端的代码:
//ChatServer.Java
import java.net.*;
import java.util.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ChatServer extends JFrame {
JTextArea ta = new JTextArea();
ServerSocket server = null;
Collection cClient = new ArrayList();

public ChatServer(int port) throws Exception {
server = new ServerSocket(port);
add(ta, BorderLayout.CENTER);
setBounds(200, 200, 300, 450);
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
setVisible(true);
}

public void startServer() throws Exception {
while (true) {
Socket s = server.accept();
cClient.add(new ClientConn(s));
ta.append(s.getInetAddress().getHostName() + "进入" + " " + "端口号"
+ s.getPort());
ta.append("\n" + "当前在前总人数: " + cClient.size() + "\n\n");
}
}

class ClientConn extends Frame implements Runnable, ActionListener {
TextArea ta1 = null;
TextArea ta2 = null;
Button btn = null;
Socket s = null;

public ClientConn(Socket s) {
ta1 = new TextArea(3, 30);
ta2 = new TextArea(2, 15);
btn = new Button("发送");
this.setLayout(new BorderLayout());
this.add(ta1, BorderLayout.CENTER);
this.add(ta2, BorderLayout.SOUTH);
this.add(btn, BorderLayout.EAST);
this.setSize(300, 200);
this.setVisible(true);
this.setTitle("" + s.getInetAddress().getHostName() + "端口"
+ s.getPort());
this.s = s;
(new Thread(this)).start();
btn.addActionListener(this);
}

public void actionPerformed(ActionEvent e) {
try {
DataOutputStream dos = new DataOutputStream(s.getOutputStream());
dos.writeUTF("服务器:\n" + ta2.getText() + "\n");
ta1.append("服务器:\n" + ta2.getText() + "\n");
ta2.setText("");
} catch (IOException E) {

}
}

public void send(String str, String st) throws IOException {
DataOutputStream dos = new DataOutputStream(s.getOutputStream());
dos.writeUTF(st + "说:\n" + str);
}

public void dispose() {
try {
super.dispose();
ta.append(s.getInetAddress().getHostName() + "退出" + "\n");
if (s != null)
s.close();
cClient.remove(this);
ta.append("当前在线人数: " + cClient.size() + "\n\n");
} catch (Exception e) {
e.printStackTrace();
}
}

public void run() {
try {

DataInputStream dis = new DataInputStream(s.getInputStream());
String str = dis.readUTF();
String st = s.getInetAddress().getHostName();
while (str != null && str.length() != 0) {
for (Iterator it = cClient.iterator(); it.hasNext();) {
ClientConn cc = (ClientConn) it.next();
if (this != cc) {
cc.send(str, st);
}
}
ta1.append(st + "说:\n" + str + "\n");
str = dis.readUTF();
}
this.dispose();
} catch (Exception e) {
this.dispose();
}
}
}

public static void main(String[] args) throws Exception {
JFrame.setDefaultLookAndFeelDecorated(true);
ChatServer cs = new ChatServer(8888);
cs.startServer();
}
}

2.客户端的代码:
//ChatClient.java
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ChatClient extends JFrame {
JTextArea ta = new JTextArea("你可以通过此客户端的聊天!" + "\n" );
TextArea tf = new TextArea(3, 21);
JButton btn = new JButton("发送");
JPanel jp = new JPanel();
Socket s = null;

public ChatClient() throws Exception {
this.setLayout(new BorderLayout(10, 10));
this.add(ta, BorderLayout.CENTER);
jp.add(btn, BorderLayout.SOUTH);
this.add(tf, BorderLayout.SOUTH);
this.add(jp, BorderLayout.EAST);

btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
try {
String sSend = tf.getText();
if (sSend.trim().length() == 0)
return;
ChatClient.this.send(sSend);
tf.setText("");
ta.append("你说:" + "\n");
ta.append(sSend + "\n");
} catch (Exception e) {
e.printStackTrace();
}
}
});
btn.setMnemonic(KeyEvent.VK_ENTER);
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
setBounds(300, 300, 400, 500);
setVisible(true);
tf.requestFocus();
try {
s = new Socket("10.6.86.28", 8888);
} catch (Exception e) {
ta.append("对不起!无法连接服务器" + "\n");
}
(new Thread(new ReceiveThread())).start();
}

public void send(String str) throws Exception {
DataOutputStream dos = new DataOutputStream(s.getOutputStream());
dos.writeUTF(str);
}

public void disconnect() throws Exception {
s.close();
}

public static void main(String[] args) throws Exception {
JFrame.setDefaultLookAndFeelDecorated(true);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
ChatClient cc = new ChatClient();
String str = br.readLine();
while (str != null && str.length() != 0) {
cc.send(str);
str = br.readLine();
}
cc.disconnect();
}

class ReceiveThread implements Runnable {

public void run() {
if (s == null)
return;
try {
DataInputStream dis = new DataInputStream(s.getInputStream());
String str = dis.readUTF();
while (str != null && str.length() != 0) {

ChatClient.this.ta.append(str + "\n");
str = dis.readUTF();
}
} catch (Exception e) {
e.printStackTrace();
}

}
} }

热心网友 时间:2023-10-22 08:25

等我做完给你发上去,连个做的的人也没有,真可怜
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
PCR有哪些分类? 不鸣则已 一鸣惊人的三个星座 电动车加装蓝牙音箱怎么接线 怎么把QQ同步助手卸载掉?简直就是垃圾,什么没操作就直接给安装上了,怎... 怎么把QQ同步助手卸载掉?简直就是流氓软件。什么东西没经过我点‘’同 ... excel表如何将相间隔的不同两行组合在一起,成为一行? excel工作表如何对行各自组合 考科目一自己去还是驾校统一去 科目一是自己考还是在驾校 社保转移后,新单位没要转移单,只要了身份证,是不是就可以办理了 什么是社保转移 如何启动vc6.0的网络聊天程序 乐聊是干嘛的 “fame”与“reputation”的区别是什么? 买什么商业保险可以报销腹腔镜手术 二人有限责任公司股东退股 股东退股后的清算程序有哪些 国外医院空荡荡的,为什么国内的医院却人满为患? 喜马拉雅1000万播放量多少钱 用itunes怎样恢复出厂设置 词语解释谢谢~ 用美的电饭煲炖排骨怎么炖 如何推送给别人 怎样选择一家好的苏州办公家具厂家 急购办公家具,苏州市哪里卖办公家具最便宜呢? 苏州办公家具哪里买好 苏州铁豹办公家具有限公司怎么样? 在苏州办公家具哪个厂家比较好啊? 如何推送给别人 《(系统)万人迷养成手册》txt下载在线阅读全文,求百度网盘云资源 微核下载可以选号吗 买二手房需要提供银行卡余额证明吗 如何将朋友推送给另一个朋友 6边形魔方有什么口诀?? 我的银行卡怎么绑定别人的?步骤? 给我一些素材,办黑板报用。主题是百善孝为先。太难办了,请给我一些与这些相关的材料和图片。谢谢!!! 下通画_舸,上驰华珂辔出自哪儿 微信上驰力奇网络怎么撤出 世界上第一个上市公司股票发行于哪个国家 半夜上厕所,禁忌什么? 如何推送 深夜上厕所的时候感觉到脖子后面有东西轻轻划过,为什么不要用手去摸? 半夜上厕所!需要禁忌什么?有鬼吗??如题 谢谢了 白兰地40度相当于白酒多少度 法国人头马干邑白兰地40度怎么喝 金湖县通达客车门业有限公司怎么样? 呼和浩特通达长途汽车站有去托县的车吗 天镇县通达汽车电话多少 呼和浩特白塔机场到呼和浩特通达长途汽车南站怎么走 呼和浩特到唐山大巴车几点发车 宽城通达汽车运输有限公司怎么样?