|
Java форум JavaTalks форум программистов
|
|
|
|
| Предыдущая тема :: Следующая тема |
| Автор |
Сообщение |
Andrey Parhomenko : 99 Новичок Откуда: Ukraine.Sumy
|
Окт 01, 2008 23:39 |
|
|
Пишу что-то типа чата со сервером(что-то типа irc)
Сервер
| Код: |
import java.io.*;
import java.lang.ClassNotFoundException;
import java.lang.Runnable;
import java.lang.Thread;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class Server {
private ServerSocket server;
private int port = 7777;
public Server() {
try {
server = new ServerSocket(port);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Server example = new Server();
example.handleConnection();
}
public void handleConnection() {
System.out.println("Waiting for client message...");
//
// The server do a loop here to accept all connection initiated by the
// client application.
//
while (true) {
try {
Socket socket = server.accept();
new ConnectionHandler(socket);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
class ConnectionHandler implements Runnable {
private Socket socket;
public ConnectionHandler(Socket socket) {
this.socket = socket;
Thread t = new Thread(this);
t.start();
}
public void run() {
try
{
System.out.println("user " + "connected");
DataInputStream ois = new DataInputStream(socket.getInputStream());
Scanner in = new Scanner(ois);
while(in.hasNextLine()){
System.out.println(in.nextLine());
}
ois.close();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
|
Клиент
| Код: |
import java.io.*;
import java.lang.ClassNotFoundException;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class Client {
public static void sendMess(PrintWriter icc, Socket socket, String mess){
try{
icc.write(mess);
}catch (Exception e){e.printStackTrace();
}
}
public static void main(String[] args) {
try {
//
// Create a connection to the server socket on the server application
//
InetAddress host = InetAddress.getLocalHost();
Socket socket = new Socket(host.getHostName(), 7777);
//
// Send a message to the client application
//
BufferedReader userText = new BufferedReader(new InputStreamReader(System.in));
// write
PrintWriter oos = new PrintWriter(socket.getOutputStream());
sendMess(oos, socket, "text");
oos.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
|
При запуске Client? происходит отправка сообщения и сокет почему-то закрывается, |
|
|
|
 |
Староверъ : 7381 Ктапубеп Откуда: Elfland
|
Окт 02, 2008 6:39 |
|
|
Ну логично, программа-клиент просто завершается. А что должно быть?
зы: в Примерах есть что-то про на эту тему. |
|
|
|
 |
Andrey Parhomenko : 99 Новичок Откуда: Ukraine.Sumy
|
Окт 02, 2008 15:02 |
|
|
| Нужно, чтобы клиент постоянно считывал инфу с сервера. |
|
|
|
 |
Староверъ : 7381 Ктапубеп Откуда: Elfland
|
Окт 02, 2008 15:49 |
|
|
| Клиент посылает информацию, а сервер сидит и слушает порт, когда туда что-то приходит, то он принимает информацию. |
|
|
|
 |
Andrey Parhomenko : 99 Новичок Откуда: Ukraine.Sumy
|
Окт 02, 2008 16:15 |
|
|
| А можно сделать, чтобы все, что приходило на саервер, приходило и клиенту, например как в Mirc? |
|
|
|
 |
kez : 982 JavaTalks Chess Master 2008 Откуда: Санкт-Петербург
|
Окт 02, 2008 16:21 |
|
|
|
|
|
|
 |
Andrey Parhomenko : 99 Новичок Откуда: Ukraine.Sumy
|
Окт 02, 2008 16:27 |
|
|
За исходники спасибо, но хотелось бы самому разобраться на простеньком примере, а не на большом проекте  |
|
|
|
 |
шкипер : 1960 Java Developer Откуда: Харьков
|
Окт 02, 2008 16:36 |
|
|
| Andrey Parhomenko писал(а): |
За исходники спасибо, но хотелось бы самому разобраться на простеньком примере, а не на большом проекте  |
Но согласитесь, легче прочесть в книжке, как организуются циклы, чем ждать объяснения этого на форуме....  _________________
aka ur6lad |
|
|
|
 |
Andrey Parhomenko : 99 Новичок Откуда: Ukraine.Sumy
|
Окт 03, 2008 22:04 |
|
|
Как сделать, чтобы весь текст, который пишется на сервер сразу передавал его всем подключённым клиентам?
Приложение переписано:
Client
| Код: |
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.InetAddress;
import java.net.Socket;
public class Client {
public static String server = "localhost";
public static int port = 7777;
public static String nick;
public static void printToChat(String s, PrintStream ou) throws NullPointerException, IOException{
ou.println(s);
}
public static void main(String[] args) throws IOException{
User.setNick("sdsd");
nick = User.getNick();
InetAddress address = InetAddress.getByName(server);
System.out.println("connecting to: "+address);
Socket socket = new Socket(address, port);
System.out.println("connected to "+socket.getInetAddress().getHostName()+" to port "+socket.getPort());
/* ++++++++++ */
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintStream out = new PrintStream(socket.getOutputStream(), true);
String fromUser, fromServer;
String str;
while ((str = in.readLine()) != null) {
out.println("/nick kk");
out.println("/connect");
out.println("/users");
out.println("message");
System.out.println("" + str);
}
in.close();
out.close();
}
}
|
Server
| Код: |
import java.io.*;
import java.lang.ClassNotFoundException;
import java.lang.Runnable;
import java.lang.Thread;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Vector;
class ServerInfo{
public static Vector<String> users;
public static int usercount = 2;
public static void setUserCount(int c){
usercount = c;
}
public static int getUserCount(){
return usercount;
}
}
public class Server {
private ServerSocket server;
private int port = 7777;
public Server() {
try {
server = new ServerSocket(port);
System.out.println(server.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Server example = new Server();
example.handleConnection();
}
public void handleConnection() {
System.out.println("Server started");
while (true) {
try {
Socket socket = server.accept();
new ConnectionHandler(socket);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
class ConnectionHandler implements Runnable {
private Socket socket;
public ConnectionHandler(Socket socket) {
this.socket = socket;
Thread t = new Thread(this);
t.start();
}
public void run() {
String nick = "Guest";
try
{
BufferedReader rd = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintStream out = new PrintStream(socket.getOutputStream());
String str;
while ((str = rd.readLine()) != null) {
System.out.println("" + str);
if ((str.length() >=5) && (str.substring(0,5).equals("/nick"))){
nick = str.substring(6);
} else
if (str.equals("/users")){
out.println("" + ServerInfo.usercount);
} else
if (str.equals("/connect")) {
out.println("User " + nick + " connected");
} else{
out.println(nick+ " [-->]" + str);
}
}
rd.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally{
try
{
socket.close();
}
catch (IOException e)
{ }
}
}
}
|
|
|
|
|
 |
Ckpumo : 21 Новичок
|
Мар 09, 2010 13:33 |
|
|
| Код: |
C:\Documents and Settings\Manhunt\Мои документы\Client.java:39: cannot find symbol
symbol : variable User
location: class Client
User.setNick("23");
^
C:\Documents and Settings\Manhunt\Мои документы\Client.java:41: cannot find symbol
symbol : variable User
location: class Client
nick = User.getNick();
^
2 errors |
что за ошибка скажите плиз? |
|
|
|
 |
alon4ik : 923 free butterfly Откуда: Харьков
|
Мар 09, 2010 15:20 |
|
|
компилятор не телепат и не знает, что такое User. Что это такое вообще за переменная или класс, где объявлена? _________________ ЯроллеR |
|
|
|
 |
Ckpumo : 21 Новичок
|
Мар 09, 2010 15:26 |
|
|
скомпилировал вышеописанный код
а как еще сделать так чтобы можно было указывать свой ник и адрес и порт сервера? |
|
|
|
 |
alon4ik : 923 free butterfly Откуда: Харьков
|
Мар 09, 2010 16:10 |
|
|
| Ckpumo писал(а): |
скомпилировал вышеописанный код
а как еще сделать так чтобы можно было указывать свой ник и адрес и порт сервера? |
А в чем проблема?
предлагаете пользователю ввести эти данные (если консольное приложение - то с консоли, если десктопное - то в какие-то поля на форме), загоняете в переменные эти значения ну и передаете их в качестве параметров соединения. _________________ ЯроллеR |
|
|
|
 |
Ckpumo : 21 Новичок
|
Мар 10, 2010 20:35 |
|
|
| ммм хорошо, а как сделать чтобы не дублировалось мое сообщение, т.е. не возвращалось мне то что я написал серверу |
|
|
|
 |
|
|
Страница 1 из 1
|
Список форумов
-> Сети |
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|