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語言編寫一個聊天伺服器程序
你找錯地方了 ,這個地方充滿了浮躁,誰給你完全寫個這東西啊