導航:首頁 > 編程大全 > 網路聊天室系統語言實現

網路聊天室系統語言實現

發布時間:2023-05-11 20:07:51

A. 急需一個用java 語言寫的聊天程序

客戶端:
package chatroom;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
import javax.swing.*;
public class client extends JFrame implements ActionListener,Runnable{
JPanel conn,text,send;
JLabel name,sendto;
JComboBox list;
JButton con,snd,clear;
JTextArea talk;
JTextField who,say;
jscrollPane jsp;
Socket client;
InputStream is;
OutputStream os;
PrintStream ps;
BufferedReader br;
String receive,yousay;
Thread th;
DataInputStream dis;
Double tof;

client()
{
super("聊天室客戶端");
this.setSize(800,600);
this.setResizable(false);
conn=new JPanel();
text=new JPanel();
send=new JPanel();
this.getContentPane().add(conn);
conn.setBounds(0, 0, this.getWidth(),50);
name=new JLabel("姓名:");
who=new JTextField();
con=new JButton("連接");
conn.setLayout(null);
conn.add(name);
name.setBounds(30, 10, 50, 25);
conn.add(who);
who.setBounds(80, 10, 150, 25);
conn.add(con);
con.setBounds(250,10, 60, 25);

this.getContentPane().add(text);
text.setBounds(0,50,this.getWidth(),450);
text.setLayout(new BorderLayout());
jsp=new JScrollPane();
talk=new JTextArea();
jsp.getViewport().setView(talk);
text.add(jsp,"Center");
talk.setLineWrap(true);

this.getContentPane().add(send);
send.setLayout(null);
send.setBounds(0, 480, this.getWidth(), 150);
sendto=new JLabel("發送到:");
snd=new JButton("發送");
list=new JComboBox();
say=new JTextField();
clear=new JButton("清空");
send.add(sendto);
sendto.setBounds(30, 525, 50, 25);
send.add(list);
list.setBounds(100, 525, 75, 25);
send.add(say);
say.setEditable(true);
say.setBounds(200, 525, 300, 25);
send.add(snd);
snd.setBounds(520, 525, 100, 25);
send.add(clear);
clear.setBounds(650, 525, 100, 25);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
con.addActionListener(this);
snd.addActionListener(this);
}

public void actionPerformed(ActionEvent ae) {
if (ae.getActionCommand().equals("連接"))
{
try
{
client=new Socket(InetAddress.getLocalHost(),55555);
talk.append("連接成功...\n");
con.setText("斷開");
is=client.getInputStream();
os=client.getOutputStream();
th=new Thread(this);
String id=who.getText();
byte b[]=id.getBytes();
DataOutputStream dos=new DataOutputStream(os);
int len=b.length;
dos.writeInt(len);
dos.write(b);
th.start();

}catch(Exception e){talk.append("連接失敗\n"+e.toString()+"0000");}
}
else if(ae.getSource()==snd)
{
if(list.getSelectedItem().toString()=="所有人")
{
yousay="@open"+say.getText();
byte b[]=yousay.getBytes();
DataOutputStream dos=new DataOutputStream(os);
try{
int len=b.length;
dos.writeInt(len);
dos.write(b);
}catch(Exception e)
{
System.out.print(e.toString()+"1111");
}
}
else
{
yousay="@whisper"+say.getText();
byte b[]=yousay.getBytes();
byte w[]=list.getSelectedItem().toString().getBytes();
DataOutputStream dos=new DataOutputStream(os);
try{
int len=b.length;
int wlen=w.length;
dos.writeInt(len); //內容
dos.write(b);
dos.writeInt(wlen); //發送對象
dos.write(w);
}catch(Exception e)
{
System.out.print(e.toString()+"AAAA");
}
}
}
else if(ae.getActionCommand().equals("斷開"))
{
try
{
client.close();
talk.append("連接已斷開\n");
con.setText("連接");
}catch(Exception e){System.out.println(e.toString()+"2222");}
}
}
public void run()
{

while(true)
{
try
{
dis=new DataInputStream(is);
tof=dis.readDouble();
if(tof==1.1)
{
dis=new DataInputStream(is);
int number;
list.removeAllItems();
list.addItem("所有人");
number=dis.readInt();
for(int i=0;i<number;i++)
{
int len=dis.readInt();
byte b[]=new byte[len];
dis.read(b);
String name=new String(b);
list.addItem(name);
}

}
else if(tof==2.2)
{
try
{
dis=new DataInputStream(is);
int len=dis.readInt();
byte b[]=new byte[len];
dis.read(b);
receive=new String(b);
talk.append(receive+"\n");
}catch(Exception e){JOptionPane.showMessageDialog(this, "連接已斷開","消息",JOptionPane.INFORMATION_MESSAGE);break;}
}
}catch(Exception e){JOptionPane.showMessageDialog(this, "連接已斷開","消息",JOptionPane.INFORMATION_MESSAGE);break;}
}
}

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

}

}
服務端:
package chatroom;
import java.awt.*;
import javax.swing.*;
import java.net.*;
import java.util.Vector;
import java.io.*;
public class server extends JFrame implements Runnable{
JPanel jp1;
JTextArea jta;
JScrollPane jsp;
Socket socket=null;
ServerSocket server;
InputStream is;
OutputStream os;
static int i=0,login;
int no;
static String s="";
Thread sr;
Thread th[]=new Thread[20];
static Vector ol=new Vector();
static public byte w[]=null;
static String from=""; //人名
static String to="";
static String fromtext=""; //內容
static String totext="";
server()
{
super("聊天室服務端");
this.getContentPane().setLayout(new GridLayout(1,1));
this.setSize(400,300);
jp1=new JPanel();
jta=new JTextArea();
jsp=new JScrollPane();
this.getContentPane().add(jp1);
jp1.setLayout(new GridLayout(1,1));
jsp.getViewport().setView(jta);
jp1.add(jsp);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);

}
public static void main(String[] args) {
server sr=new server();
sr.sr=new Thread(sr);
sr.sr.start();
sendtoall sta=new sendtoall();
returnfrom rf=new returnfrom(sr);
returnto rt=new returnto(sr);
sta.start();
rf.start();
rt.start();

}
public void run()
{
try
{
server=new ServerSocket(55555);
while(true)
{
socket=server.accept();
is=socket.getInputStream();
DataInputStream dis=new DataInputStream(is);
int len=dis.readInt();
byte b[]=new byte[len];
dis.read(b);
String id=new String(b);
record v=new record(id,socket);
ol.addElement(v);
for (int i=0;i<ol.size();i++)
{
if (ol.elementAt(i).equals(v))
{
no=i;
}
}
login=1;
s=id+"已來到聊天室!";
th[no]=new Thread(new receive(this,no));
th[no].start();
}
}catch(Exception e){System.out.println(e.toString()+"aaaa");}

}
}
class receive implements Runnable
{
InputStream is;
OutputStream os;
server sr;
Socket sk;
int i;
String name;
String ip;
receive(server sr,int i)
{
this.sr=sr;
this.i=i;
sk=((record)sr.ol.elementAt(i)).ip;
name=((record)sr.ol.elementAt(i)).name;
ip=((record)sr.ol.elementAt(i)).ip.getInetAddress().toString();
}
public void run()
{
while(true)
{
try
{
is=sk.getInputStream();
DataInputStream dis=new DataInputStream(is);
int len=dis.readInt();
byte b[]=new byte[len];
dis.read(b);
String abc=new String(b);
sr.jta.append(abc);
if(abc.substring(0,5).equals("@open"))
{

server.s=name+"["+ip.substring(1, ip.length())+"]"+"說:"+abc.substring(5,abc.length());
sr.jta.append(server.s+"\n");
}
else if(abc.substring(0,8).equals("@whisper"))
{
int wlen=dis.readInt();
sr.w=new byte[wlen];
dis.read(sr.w);
server.to=new String(sr.w);
server.from=((record)sr.ol.elementAt(i)).name;
String ip=((record)sr.ol.elementAt(i)).ip.getInetAddress().toString();
// server.s=server.from+"對"+server.to+"["+ip.substring(1, ip.length())+"]"+"悄悄地說:"+abc.substring(8,abc.length());
server.fromtext="你對"+server.to+"["+ip.substring(1, ip.length())+"]"+"悄悄地說:"+abc.substring(8,abc.length());
server.totext=server.from+"["+ip.substring(1, ip.length())+"]"+"對你悄悄地說:"+abc.substring(8,abc.length());
sr.jta.append(server.s+"\n");
}
}catch(Exception e)
{
try
{
DataOutputStream dos=new DataOutputStream(os);
server.ol.removeElementAt(i);
server.s=name+"已離開聊天室.";
server.login=1;
break;
}catch(Exception f){}
}
}
}
}
class sendtoall extends Thread
{
int len,number;
byte b[];
server sr;
Socket st;
OutputStream os;
DataOutputStream dos;
public void run()
{
while(true)
{
try
{
if(server.login==1)
{
number=0;
number=server.ol.size();
dos=new DataOutputStream(os);
for(int i=0;i<server.ol.size();i++)
{
st=((record)sr.ol.elementAt(i)).ip;
os=st.getOutputStream();
dos=new DataOutputStream(os);
dos.writeDouble(1.1);
dos.writeInt(number);
for (int j=0;j<number;j++)
{
String name=((record)sr.ol.elementAt(j)).name;
byte b[]=name.getBytes();
int len=b.length;
dos.writeInt(len);
dos.write(b);
}
}
server.login=0;

}
else if(!server.s.equals("")&&sr.ol.size()>0)
{
b=server.s.getBytes(); //String類型中 漢字佔一個位元組,但是byte類型中,漢字占兩個位元組
len=b.length;
//len=server.s.length();
//b=new byte[len];
//b=server.s.getBytes();
for(int i=0;i<server.ol.size();i++)
{
st=((record)sr.ol.elementAt(i)).ip;
os=st.getOutputStream();
DataOutputStream dos=new DataOutputStream(os);
dos.writeDouble(2.2);
dos.writeInt(len);
dos.write(b);
}
server.s="";

}

}catch(Exception e){System.out.println(e.toString()+"sdasd");}
}
}
}
class returnfrom extends Thread
{
int len,wlen;
byte b[];
byte w[];
server sr;
Socket st;
OutputStream os;
DataOutputStream dos;
//String from="",to="";
returnfrom(server sr)
{
this.sr=sr;
}
public void run()
{
while(true)
{
if(!server.fromtext.equals(""))
{
b=server.fromtext.getBytes();
len=b.length;
sr.jta.append(sr.fromtext);
try
{
for(int i=0;i<server.ol.size();i++)
{
if(((record)sr.ol.elementAt(i)).name.equals(server.from))
{
st=((record)sr.ol.elementAt(i)).ip;
os=st.getOutputStream();
DataOutputStream dos=new DataOutputStream(os);
dos.writeDouble(2.2);
dos.writeInt(len);
dos.write(b);
}
}
}catch(Exception e){System.out.println(e.toString()+"wwww");}
server.fromtext="";
server.from="";
}
}

}
}

class returnto extends Thread
{
int len,wlen;
byte b[];
byte w[];
server sr;
Socket st;
OutputStream os;
DataOutputStream dos;
//String from="",to="";
returnto (server sr)
{
this.sr=sr;
}
public void run()
{
while(true)
{
if(!server.totext.equals(""))
{
w=server.totext.getBytes();
wlen=w.length;
try
{
for(int i=0;i<server.ol.size();i++)
{
if(((record)sr.ol.elementAt(i)).name.equals(server.to))
{
st=((record)sr.ol.elementAt(i)).ip;
os=st.getOutputStream();
DataOutputStream dos=new DataOutputStream(os);
dos.writeDouble(2.2);
dos.writeInt(wlen);
dos.write(w);
}
}
}catch(Exception e){System.out.println(e.toString()+"wwww");}
server.totext="";
server.to="";
}
}
}
}

class record
{
String name;
Socket ip;
record(String id,Socket socket)
{
name=id;
ip=socket;
}
}

以前學習java時寫的,是個在線聊天室只有群聊,私聊,上下線提示,搞不好裡面還有錯誤- -其他功能自己看著加吧,你要的功能實在是很好很強大.

B. java實現聊天室功能難不難

我本身無法判斷難不難,但是實現聊天室功能需要比較豐富的編程知識和技能,包括網路編程、線程管理明銀、數據結構等方面的知識,同時需要考慮安全性、穩定性等因素,因此相對來說還是比較有挑戰性的。需要考慮的要點如下:1. 通信協議選擇和實現:網路編程中通常使用TCP或UDP協議實現數據傳輸,聊天室也需要選擇合適的協議並進行實現。2. 用戶管理和身份認證:聊天室需要實現用戶注冊、登錄、退出等功能,並對用戶身份進行合法性認證。3. 實現聊天室的基本功能:發送聊天內容、接收聊天內容、查弊槐租看在線用戶列表等功能,還需要實現一些高級功能,例如發租兆送文件、語音消息等。4. 廣播和私聊功能實現:聊天室需要實現廣播功能,使得所有用戶都能收到發送的消息,也需要實現私聊功能,使得用戶可以與特定用戶進行一對一聊天。5. 安全性防禦功能實現:聊天室需要實現安全性防禦功能,防止用戶發送不良信息、泄露個人信息等,防範網路攻擊等安全隱患。總體來說,實現聊天室需要多方面技術的支持,需要認真設計和實現,考慮到軟體穩定、可靠、可擴展、易用等方面,是相對有挑戰性的。

C. 如何用C語言編寫一個簡單的聊天室程序

這樣:

#include <stdlib.h>

#include <stdio.h>

#include <errno.h>

#include <string.h>

#include <unistd.h>

#include <netdb.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <sys/types.h>

#include <arpa/inet.h>

#include <pthread.h>

#define MAXLINE 100;

void *threadsend(void *vargp);

void *threadrecv(void *vargp);

int main()

{

int *clientfdp;

clientfdp = (int *)malloc(sizeof(int));

*clientfdp = socket(AF_INET,SOCK_STREAM,0);

struct sockaddr_in serveraddr;

struct hostent *hp;

bzero((char *)&serveraddr,sizeof(serveraddr));

serveraddr.sin_family = AF_INET;

serveraddr.sin_port = htons(15636);

serveraddr.sin_addr.s_addr = inet_addr("127.0.0.1");

if(connect(*clientfdp,(struct sockaddr *)&serveraddr,sizeof(serveraddr)) < 0){

printf("connect error ");

exit(1);

}

pthread_t tid1,tid2;

printf("connected ");

while(1){

pthread_create(&tid1,NULL,threadsend,clientfdp);

pthread_create(&tid2,NULL,threadrecv,clientfdp);

}

return EXIT_SUCCESS;

}

void *threadsend(void * vargp)

{

//pthread_t tid2;

int connfd = *((int *)vargp);

int idata;

char temp[100];

while(1){

//printf("me: ");

fgets(temp,100,stdin);

send(connfd,temp,100,0);

printf(" client send OK ");

}

printf("client send ");

return NULL;

}

void *threadrecv(void *vargp)

{

char temp[100];

int connfd = *((int *)vargp);

while(1){

int idata = 0;

idata = recv(connfd,temp,100,0);

if(idata > 0){

printf("server : %s ",temp);

}

}

return NULL;

}

(3)網路聊天室系統語言實現擴展閱讀:

注意事項

linux下編譯多線程代碼時,shell提示找不到 pthread_create函數,原因是 pthread.h不是linux系統默認載入的庫文件,應該使用類似如下gcc命令進行編譯:

gcc echoserver.c -lpthread -o echoserver

只要注意 -lpthread參數就可以了。

D. go語言聊天室實現(二)gorilla/websocket中的聊天室示例

我們可以看到 gorilla/websocket中的examples中有一個聊天室的demo。

我們進入該項目可以看到裡面有這樣的一些內容

按照官方的運行方式來運行這個項目差簡

在瀏覽器中打開8080埠,可以看到該項目可以被成功運行了。

就是這樣一個簡單的demo。

然後我們去看一下它的具體實現。
在這個項目中首先定義了一個hub的結構體:

這個結構體中,clients代表所有已經注冊的用戶,broadcast管道會存儲客戶端發送來的信息。 register是一個*Client類型的管道,用於存儲新注冊的用戶,unregister管道反之。

我們打開main.go,main函數的源碼為:

在這里首先會新開一個goroutine,去跑hub的run方法,run方法中一個死循環,不停地去輪詢hub中的內容

如果取到了新用戶,就加入到clients中,如果悶喚取到了信息,就循環所有的client,將信息寫到client.send中。
我們看到在請求路徑為根的時候,它會請求一個函數,而這個函數就是將home.html發送到客戶螞慶凱端。
而在請求路徑為「/ws」的時候,他會執行一個serveWS的函數。

每當一個新的用戶進來之後,首先將連接升級為長連接,然後將當前的client寫到register中,由hub.run函數去做處理。然後開啟兩個goroutine,一個去讀client中發送來的數據,一個將數據寫入到所有的client中,去發送給用戶。
這就是整個聊天室的實現原理。

E. 怎麼實現java一對一聊天室可以介紹一下嗎

要實現Java一對一聊天室,可以使用Socket編程,以下是一個簡單的實現步驟:

1.創建客戶端和伺服器端的Socket對象,分別用於連接客戶端和伺服器端;

2.在客戶端和伺服器端中分別創建輸入和輸出流,用於發送和接收消息;

3.實現客戶端和伺服器端的消息傳遞機制,即客戶端芹埋輪和伺服器端可以相互發送和接液慎收消息;

4.實現GUI,即為客戶端創建一個用戶界面,使得用戶可以嫌信方便地輸入和接收消息;

5.在代碼中添加異常處理機制,以處理可能發生的異常情況。

F. 語音聊天系統源碼的實現,離不開這些功能

語音聊天系統源碼的實現,首先離不開的是它的基礎功能——語音通話。

1、創建用戶界面

根據場景的需要,為項目創建語音通話的用戶界面。

2、獲取設備許可權

調用 checkSelfPermission 方法,在開啟 Activity 時檢查並獲取 Android 移動設備的麥克風使用許可權。

3、 初始化 RtcEngine

在調用其他 Agora API 前,需要創建並初始化 RtcEngine 對象。

將咐帶獲取到的 App ID 添加到 string.xml 文件中的 agora_app_id 一欄。調用 create 方法,傳入獲取到的 App ID,即可初始化 RtcEngine。

你還根據場景需要,在初始化時注冊想要監聽的回調事件,如遠端用戶下線或靜音回調。注意不要在這些回調中進行 UI 操作。

語音聊天室平台源碼還要覆蓋社交、 娛樂 、直播、電商等多種泛互聯網行業應用場景

語音聊天室平台源碼可按需搭建直播系統,尤其是語音直播,是當下比較流行的直播產品,語音直播與其他直播不同點在於語音直播是通過聲音傳遞,而無需出現在畫面里,並且聽眾也不需要佔用時間,可以邊聽直播邊做其他,更加解放了雙手雙眼。語音聊天室平台源碼的實時音視頻能力保證了用戶在房間內衡鄭蘆播放音樂的同時,實時語音溝通依舊流暢,同時提供包括耳返、變聲的趣味化能力,保證最佳的K歌 娛樂 體驗。

各類直播源碼都少不了的社交動態

2、社交話題:語音社交系統源碼用戶在發布動態時,可以添加話題提高曝光度,也可以通過話題獲取更多動態內容。

以上這些功能都是語音聊天系統源碼需要實現的功能,在基礎的語音聊天功能之上,還加入了互動和 娛樂 成分,帶叢桐給用戶豐富的體驗。

G. 網上語音聊天系統的設計與實現

一度教育:給大學生更多求職力量
隨著it高薪職業企業的迅速發展,it高薪職業教育人才需求量逐年攀升,it高薪職業教育人才的薪資也不斷提高。但是很多高校的計算機相關專業的畢業生還是感到就業壓力大、求職面試四處碰壁。原因之一,也是最重要的原因就是大學畢業之時,他們還不夠專業。
相比之下,長沙一度教育學校給學生最大的幫助李升,就是優化他們的專業度,以此來解決就業難的問題。也許你會問我,為什麼一度就可以聲稱自己是業內最專業的。可以這樣說:一度教育專業的java軟體工程師技術研發團隊、項目經理團隊和理論講師團隊,從項目採集、教材的自主研發和每年更新的項目實訓,專業第一,集中力量專注java。同時,一度教育不僅教授java語言,還注重培訓者在實訓中掌握java web技術及java及時在網路上的應用,更加深入教授java框架技術;同時強調培訓者java編程思腔碧想、創新能力的培養。實訓後可以輕松擔任大型企業的軟體工程師、系統分析師、構架師和項目經理。
同時,即使大學生畢業時並不十分優秀,或還未掌握IT企業的應用技術,可以在畢業時先通過某些成熟的培訓機構如長沙一度教育學習JAVA軟體開伍擾舉發知識和方法,掌握最新的技術,並通過大量項目實戰積累項目經驗,快速成長為優秀的軟體開發人才。這些大型培訓機構一般有較好的就業通道,為畢業學員提供就業推薦服務。通過努力學習,優秀畢業學員很有機會進入國內外一流IT企業工作。

H. 用C語言實現聊天室需要什麼技術

  1. 實現聊天室涉及到通訊技術,網路技術,P2P技術,保密技術,用戶交互界面技術等等。通訊技術方面要實現音視頻語音對話的功能,用戶交互界面需要根據用戶的功能的需求和使用體驗,製作出體驗良好的界面。

  2. 每種技術都需要花費大量的時間精力學習。例如,在C語言裡面,通訊技術里一般使用套接字Socket來實現。套接字是支持TCP/IP網路通信的基本操作單元。多個TCP連接或多個應用程序進程可能需要通過同一個 TCP協議埠傳輸數據。為了區別不同的應用程序進程和連接,許多計算機操作系統為應用程序與TCP/IP協議交互提供了稱為套接字(Socket)的介面。

閱讀全文

與網路聊天室系統語言實現相關的資料

熱點內容
new文件怎麼改為pdf 瀏覽:930
刻錄文件用什麼列印機 瀏覽:888
德國大數據工程師年薪大概多少錢 瀏覽:870
訓練哪個app好 瀏覽:821
90版本新男魔法師刷圖加點2015 瀏覽:881
如何進行數據差異性比較 瀏覽:68
微信聊天記錄默認存在哪個文件夾 瀏覽:252
張孝祥java郵件開發詳解 瀏覽:431
財政保障水平分析取哪個數據 瀏覽:391
linux下增加路由命令 瀏覽:419
iphone沖刷固件 瀏覽:604
網路機房平面圖 瀏覽:579
筆記本電腦卡慢怎麼處理win10 瀏覽:77
編程模擬用什麼軟體 瀏覽:424
數控編程到哪裡找工作 瀏覽:48
ps濾鏡液化膨脹工具 瀏覽:426
一張表的數據比例是多少 瀏覽:497
微信綁不了交行信用卡嗎 瀏覽:86
泰住建201764號文件內容 瀏覽:23
Excel管理文件夾 瀏覽:427

友情鏈接