Не сте регистриран! Регистрирайте се БЕЗПЛАТНО, за да използвате услугите на сайта!

   Рубрики
 
 
 
 

 Форуми
» SEO и оптимизация
» Всичко за PHP и Perl
» Всичко за C, C++ и .NET
» Всичко за Java и JSP
» Всичко за SQL и MySQL
» Всичко за XHTML и CSS
» Презентация на сайтове
 Socket програмиране с Java - Пример: Разработка на chat клиент и сървър
  1. Многопотребителски сървър за разговори
  2. Как работи сървърът за разговори
  3. Как може да се подобри chat сървъра
  4. Как може да се подобри chat сървъра-2
  5. Как работи истинският многопотребителски chat сървър
Magenta
     
Автор  Magenta (16.05.2004 17:28)  съобщение до автора
Погледнат  4355 пъти  добави към любими
Оценка  добави коментар
Гласове  3  изпрати на приятел
Коментари  (0)  абонирай се за Java
    Страница 1 / 5

 



               Интернет Програмиране с Java
                 Разработка на chat клиент/сървър


Многопотребителски сървър за разговори (multi-user chat server)
Нека сега си поставим една по-сложна задача – реализация на сървър за разговори (chat server). Чрез него ще демонстрираме силата на многонишковото програмиране при разработка на мрежови приложения. Да разгледаме първо една примерна реализация на многопотребителски сървър за разговори:


CODE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
//ChatServer.java
import java.io.*;
import java.net.*;
import java.util.Vector;

public class ChatServer {
   
public static void main(String[] args)
   
throws IOException {
       
ServerSocket serverSocket = new ServerSocket(5555);
       
System.out.println("Chat server started on port " +
           
serverSocket.getLocalPort());

       
ServerMsgDispatcher dispatcher =
           
new ServerMsgDispatcher();
       
dispatcher.start();

       
while (true) {
           
Socket clientSocket = serverSocket.accept();
           
ClientListener clientListener =
               
new ClientListener(clientSocket, dispatcher);
           
dispatcher.addClient(clientSocket);
           
clientListener.start();
       
}
    }
}

class ClientListener extends Thread {
   
private Socket mSocket;
   
private ServerMsgDispatcher mDispatcher;
   
private BufferedReader mSocketReader;

   
public ClientListener(Socket aSocket,
       
ServerMsgDispatcher aServerMsgDispatcher)
   
throws IOException {
       
mSocket = aSocket;
       
mSocketReader = new BufferedReader(
           
new InputStreamReader(
               
mSocket.getInputStream()));
       
mDispatcher = aServerMsgDispatcher;
   
}

   
public void run() {
       
try {
           
while (!isInterrupted()) {
               
String msg = mSocketReader.readLine();
               
if (msg == null)
                   
break;
               
mDispatcher.dispatchMsg(mSocket, msg);
           
}
        }
catch (IOException ioex) {
           
System.err.println("Error communicating " +
               
"with some of the clients.");
       
}
       
mDispatcher.deleteClient(mSocket);
   
}
}

class ServerMsgDispatcher extends Thread {
   
private Vector mClients = new Vector();
   
private Vector mMsgQueue = new Vector();

   
public synchronized void addClient(Socket aClientSocket) {
       
mClients.add(aClientSocket);
   
}

   
public synchronized void deleteClient(Socket aClientSock) {
       
int i = mClients.indexOf(aClientSock);
       
if (i != -1) {
           
mClients.removeElementAt(i);
           
try {
               
aClientSock.close();
           
} catch (IOException ioe) {
              
// Probably the socket already is closed
           
}
        }
    }

   
public synchronized void dispatchMsg(
           
Socket aSocket, String aMsg) {
       
String IP = aSocket.getInetAddress().getHostAddress();
       
String port = "" + aSocket.getPort();
       
aMsg = IP + ":" + port + " : " + aMsg + "nr";
       
mMsgQueue.add(aMsg);
       
notify();
   
}

   
private synchronized String getNextMsgFromQueue()
   
throws InterruptedException {
       
while (mMsgQueue.size() == 0)
           
wait();
       
String msg = (String) mMsgQueue.get(0);
       
mMsgQueue.removeElementAt(0);
       
return msg;
   
}

   
private synchronized void sendMsgToAllClients(String aMsg) {
       
for (int i=0; i<mClients.size(); i++) {
           
Socket socket = (Socket) mClients.get(i);
           
try {
               
OutputStream out = socket.getOutputStream();
               
out.write(aMsg.getBytes());
               
out.flush();
           
} catch (IOException ioe) {
               
deleteClient(socket);
           
}
        }
    }

   
public void run() {
       
try {
           
while (true) {
               
String msg = getNextMsgFromQueue();
               
sendMsgToAllClients(msg);
           
}
        }
catch (InterruptedException ie) {
          
// Thread interrupted. Do nothing
       
}
    }
}



  Следваща страница >> 


Ключови думи: Java socket програмиране chat клиент server сървър


Още уроци от тази рубрика


 
  • Подобни теми от myLinks
 

 1 посетител чете този урок (0 потребители и 1 гост)  
Активни потребители: ---
   
  

Еmail  
 

 

 
  • Интересно от Софтуер
 



IT-PLACE.NET © 2004 - 2008