导航:首页 > IDC知识 > 聊天服务器的实现

聊天服务器的实现

发布时间:2020-12-13 09:00:53

1、老师让写一个聊天软件(实现简易的功能即可),用socket实现通讯,不需要中间服务器,直接一个人作

代码的话太长了,简单说一下思路吧.
就是1和2,其中一个当服务器,另外一个当客户端,不管是服务器还是客户端读取到信息之后,都弹出对话框(或者是窗口),把读取到的信息用对话框显示出来.

2、利用进程通信实现客户机服务器聊天程序的算法流程图和代码

服务器端(注意要先启动服务器端)

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

public class server extends Frame implements ActionListener {
Label label = new Label("交谈内容");
Panel panel = new Panel();
TextField tf = new TextField(10);
TextArea ta = new TextArea();
ServerSocket server;
Socket client;
InputStream in;
OutputStream out;

public server() {
super("服务器");
setSize(250, 250);
panel.add(label);
panel.add(tf);
tf.addActionListener(this);
add("North", panel);
add("Center", ta);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
show();
try {
server = new ServerSocket(4000);
client = server.accept();
ta.append("客户机是:" + client.getInetAddress().getHostName() + "\n\n");
in =client.getInputStream();
out= client.getOutputStream();
} catch (IOException ioe) {
}
while (true) {
try {
byte[] buf = new byte[256];
in.read(buf);
String str = new String(buf);
ta.append("客户机说:" + str + "\n\n");
} catch (IOException e) {
}
}
}

public void actionPerformed(ActionEvent e) {
try {
String str = tf.getText();
byte[] buf = str.getBytes();
tf.setText(null);
out.write(buf);
ta.append("我说:" + str + "\n");
} catch (IOException ioe) {
}
}

public static void main(String[] args) {
new server();
}
}

客户端

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

public class client extends Frame implements ActionListener {
Label label = new Label("交谈内容");
Panel panel = new Panel();
TextField tf = new TextField(10);
TextArea ta = new TextArea();
Socket client;
InputStream in;
OutputStream out;

public client() {
super("客户机");
setSize(250, 250);
panel.add(label);
panel.add(tf);
tf.addActionListener(this);
add("North", panel);
add("Center", ta);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
show();
try {
client = new Socket(InetAddress.getLocalHost(), 4000);
ta.append("服务器是:" + client.getInetAddress().getHostName() + "\n\n");
in = client.getInputStream();
out = client.getOutputStream();
} catch (IOException ioe) {
}
while (true) {
try {
byte[] buf = new byte[256];
in.read(buf);
String str = new String(buf);
ta.append("服务器说:" + str + "\n");
} catch (IOException e) {
}
}
}

public void actionPerformed(ActionEvent e) {
try {
String str = tf.getText();
byte[] buf = str.getBytes();
tf.setText(null);
out.write(buf);
ta.append("我说:" + str + "\n");
} catch (IOException iOE) {
}
}

public static void main(String args[]) {
new client();
}
}

这个只能在自己一台电脑上先启动服务器再启动客户端才行,要想一台机子启动服务器端一台机子启动客户端需要把客户端的 client = new Socket(InetAddress.getLocalHost(), 4000);改成 client = new Socket("服务器Ip", 4000);(前提是两台机子连在局域网里面的)
没时间写,给你找个,看行不

3、用JAVA如何实现GUI的聊天室?只需实现基本的聊天室功能即可。希望给出服务器源代码和客户端源代码。

我也是初学者,现在在做聊天室,我用到的技术有
swing,socket,io,thread
现在能实现私聊和公聊的功能,还在完善中,

4、高手进,java实现聊天功能?

。。。这个我以前也遇到过、不过我是用C#写的、不过后来也有java的、你可以、使用Swing做的简单界面,及使用Socket套接字实现简单聊天 。。。。。。但是、我不知道你问的是C/S模式还是B/S 模式?
其中、B/S模式可以用Servlet来实现,思路是通过Context上下文绑定参数实现
而C/S模式的,是通过RMI远程调用的方法实现的。。。先给你个C/S模式的核心代码。。。import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.net.*;public class Server extends JFrame
{
public static void main(String [] args)
{
Server server=new Server();
//设定框架的关闭方式
server.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//显示框架
server.setVisible(true);
server.pack();
CreateServer cs=new CreateServer(server);
}
// 设定框架的宽度和高度
private static final int WIDTH=450;
private static final int HEIGHT=450;
// 聊天信息框
JTextArea mainArea=new JTextArea(12,35);
// 发送信息的填写框
JTextArea sendArea=new JTextArea(5,30);

// 构造函数
public Server()
{
//定位框架
Toolkit kit=Toolkit.getDefaultToolkit();
Dimension screenSize=kit.getScreenSize();//获取电脑当前分辨率
int width=screenSize.width;
int height=screenSize.height;
int x=(width-WIDTH)/2;
int y=(height-HEIGHT)/2;
//设置窗口显示位置
setLocation(x,y);
//设置框架大小
setSize(WIDTH,HEIGHT);
//设置标题
setTitle("小新新聊天服务器");
//设置窗口的自定义大小
setResizable(false);
//在内容表格上创建3个面板并加入到内容表格
Container con=this.getContentPane();
JPanel labelPanel=new LabelPanel();
con.add(labelPanel,BorderLayout.NORTH);
JPanel contentPanel=new ContentPanel();
con.add(contentPanel,BorderLayout.CENTER);
JPanel sendPanel=new SendPanel();
con.add(sendPanel,BorderLayout.SOUTH);
}
//聊天窗口的标题面板
class LabelPanel extends JPanel
{
public LabelPanel()
{
Font font=new Font("Dialog",Font.BOLD,18);
JLabel label=new JLabel("欢迎使用小新新聊天服务器");
label.setFont(font);
this.add(label);
}
}
// 聊天信息查看面板
//该面板内的区域为不可编辑区域
class ContentPanel extends JPanel
{
public ContentPanel()
{
FlowLayout fl=new FlowLayout(FlowLayout.CENTER);
this.setLayout(fl);
mainArea.setLineWrap(true);
mainArea.setEditable(false);
JScrollPane scrollPanel=new JScrollPane(mainArea);
this.add(scrollPanel);
}
}
// 填写发送信息的面板
class SendPanel extends JPanel
{
public SendPanel()
{
//面板的组件之间水平分隔15像素,垂直间距10像素
FlowLayout layout=new FlowLayout(FlowLayout.LEFT,15,10);
this.setLayout(layout);
sendArea.setLineWrap(true);
JScrollPane scrollPanel=new JScrollPane(sendArea);
this.add(scrollPanel);
JButton send=new JButton("发送");
this.add(send);
//对发送按钮注册动作监听器
send.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
String msg=sendArea.getText();
if(!msg.equals(""))
{
mainArea.append("【服务器】:"+msg+"\n");
sendArea.setText("");
CreateServer.sendMsg(msg);
}
else
{
return;
}
}
});
}
}
}
//创建服务器ServerSocket的类
class CreateServer extends Thread
{
private Server server;

private static BufferedReader in=null;//存储客户端发送到服务器的数据
private static PrintWriter out=null;//存储服务器发送到客户端的数据
private Socket socket=null;//等待客户端连接socket
private ServerSocket ss=null;//开启服务器socket连接

//构造函数
public CreateServer(Server s)
{
this.server=s;
try
{
ss=new ServerSocket(2345);
System.out.println("服务器成功启动...!");
socket=ss.accept();//等待客户端请求
//获取输入到服务器的数据
in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
//获取输出到客户端的数据
out=new PrintWriter(socket.getOutputStream(),true);
out.println("你好!");
}
catch(Exception r)
{
r.printStackTrace();
}
this.start();//启动线程
}
//实现信息发送到客户端的发送方法
public static void sendMsg(String s)
{
try
{
out.println("【服务器】:"+s+"\n");
}
catch(Exception e)
{
System.out.println("发送信息失败...!!");
e.printStackTrace();
}
}
// 线程Thread类的run方法实现对客户端发送来的数据监听
//线程启动后开始该方法,执行线程体
public void run()
{
String msg="";
while(true)
{
try
{
msg=in.readLine();
//Thread.sleep(500);//线程睡眠
}
catch (SocketException ex)
{
ex.printStackTrace();
break;
}
catch(IOException r)
{
r.printStackTrace();
break;
}
//若从客户端获取的信息不为空对象也不为空串
//则把信息显示在聊天信息文本域
if(msg!=null && msg.trim()!="")
{
server.mainArea.append(msg+"\n");
}
}

}
}

5、用java socket 写一个简单的 聊天 客户端与服务器端之间 都能实现 一个不

客户端代码:
package net;
import java.net.*;
import java.io.*;
public class socketclient {
public static void main(String[] args) {
s = null;
InputStream is = null;
DataInputStream d = null;
OutputStream os = null;
DataOutputStream ds = null;
try {
s = new Socket("127.0.0.1", 1555);
is = s.getInputStream();
d = new DataInputStream(is);
os = s.getOutputStream();
ds = new DataOutputStream(os);
System.out.println(d.readUTF() + " from " + s.getPort());
String content = null;
while (true) {
content = new BufferedReader(new InputStreamReader(System.in))
.readLine();
ds.writeUTF("port# " + s.getLocalPort() + " says " + content
+ " to " + s.getPort());
ds.flush();
if (content.equalsIgnoreCase("Bye"))
break;
}
} catch (ConnectException e) {
System.out.println(e.getMessage());
e.printStackTrace();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
ds.close();
os.close();
d.close();
is.close();
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
服务器端代码:
package net;

import java.net.*;
import java.io.*;

public class socketserver {
public static void main(String[] args) {
Socket s = null;
OutputStream out = null;
DataOutputStream ds = null;
InputStream is = null;
DataInputStream d = null;
try {
ServerSocket ss = new ServerSocket(1555);
s = ss.accept();
out = s.getOutputStream();
ds = new DataOutputStream(out);
is = s.getInputStream();
d = new DataInputStream(is);
} catch (IOException e) {
e.printStackTrace();
}
try {
String content = null;
ds.writeUTF("Hello " + s.getInetAddress() + " port#"
+ s.getPort());
ds.flush();
while (true) {
content = d.readUTF();
System.out.println(content);
if (content.equalsIgnoreCase("Bye"))
break;
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
ds.close();
out.close();
d.close();
is.close();
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

6、谁可以给我一个以C语言或者java写的两个客户端之间的聊天,服务器中转的聊天程序,急求啊~~~

java的 就是在你创建服务器socke线程里面,当创建好了之后将这个socket存到之前定义的全局List中去,当接受到客户端发过来的消息后迭代之前存socket的List,所有都发送一次,这样就是想了群聊了!

7、制作一个聊天软件 用自己的电脑做 服务器可以吗?

用易语言的服务器组件和客户端组件是可以做的 但是 你的机子要24小时开机很不版好 租个服务器吧权 这样简单
或者你和你的朋友说好 一天什么时候到什么时候使用也可以。 这个时候你就要个花生壳来固定你的IP ,有路由器的要映射到你的内网IP ,然后你朋友用客户端组件连接你的服务器组件。

花生壳是实现域名动态解析的.你可以在网上找下使用教程.但不建议你用个人电脑来当服务器用.一方面是家里的通风运行环境.设备设施等各方面的条件不如IDC机房.另一方面这种应用本身对带宽的要求较高.你自己在家里拉大带宽的成本比你租用服务器还要高.再涉及到备案的问题.目前网站在国内放.域名是需要备案的.而备案必须由接入商协助你提交.所以综合多方面的因素考虑.还是建议你选择IDC公司租用一台服务器比较划算.如果前期规模不大的情况下用普通配置.100M共享带宽即可满足.这样一台服务器根据你所选择线路的不同.从四五千每年到七八千每年不等

8、怎样建构类似qq的聊天服务器?

服务器抄端必须采用负载均衡的多层处理结构.

通信协议是UDP。

实现服务器之间的共享数据采用数据库同步的技术,如ORACLE的REPLICATION,或者互开SOCKET传输数据。

用TCP,SOCKET 解决许多台服务器之间互相通讯

100W同时在线!大概得50台以上的最经济的配置gg服务器,配置双CPU、256M内存和一块IDE硬盘 也就200来万吧

9、互联网即时聊天工具是如何实现的?

如下:

10、急!!linux下C语言编写一个聊天服务器程序

你找错地方了 ,这个地方充满了浮躁,谁给你完全写个这东西啊

与聊天服务器的实现相关的知识