Я начинаю с небольшого клиента чата, чтобы привыкнуть к сети, сокетам и прочему.
Мне удалось заставить код работать, когда он выполняется на той же машине, но когда код запускается на другом компьютере, следующий код:
SocketChannel schannel = SocketChannel.open(address);
не запускается. Кто-нибудь знает, почему?
Код не генерирует исключение при выполнении этой строки, он просто ничего не делает.
Код:
import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;
import java.io.*;
import java.nio.*;
import java.nio.channels.*;
import java.net.*;
import static java.nio.charset.StandardCharsets.UTF_8;
import java.util.concurrent.Executors;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.*;
public class TestClient // Chat Room TIME
{
static Scanner scanner = new Scanner(System.in);
class Scene{
boolean running = true;
private BufferedReader reader;
private PrintWriter writer;
public String moniker;
String m;
public void go(){
System.out.println("Please input your moniker:");
moniker = scanner.nextLine();
if(!Network()) {
System.out.println("Failed to connect");
return;
}
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.execute(new ServiceReader(this));
try {
while (running) {
String input = scanner.nextLine();
if (input.equalsIgnoreCase("/quit")) {
running = false;
break;
}
SendChat(input);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
executor.shutdownNow();
}
}
public BufferedReader getReader(){
return reader;
}
public boolean Network(){
try{
System.out.println("Which port? Please input an integer");
String Stringport = scanner.nextLine();
int intport = Integer.valueOf(Stringport);
System.out.println("What is the IP address of the Server?");
String ipa = scanner.nextLine();
System.out.println("Details Received");
InetSocketAddress address = new InetSocketAddress(ipa, intport);
System.out.println("Address Created");
SocketChannel schannel = SocketChannel.open(address);
//THE PROBLEM IS HERE!
System.out.println("Creating Socket");
writer = new PrintWriter(Channels.newWriter(schannel, UTF_8));
System.out.println("Writer Opened");
reader = new BufferedReader(Channels.newReader(schannel, UTF_8));
System.out.println("Reader Opened");
System.out.println("Networking Established, finished.");
return true;
}
catch (Exception e){
e.printStackTrace();
return false;
}
}
public void SendChat(String input){
if(writer == null) {
System.out.println("Not Connected to Server");
return;
}
String m = moniker+": "+input;
writer.println(m);
writer.flush();
if (writer.checkError())
{
System.out.println("Connection lost while sending.");
running = false;
}
}
}
public class ServiceReader implements Runnable{
private Scene scene;
private BufferedReader reader;
public void run(){
reader = scene.getReader();
String message;
try{
while ((message = reader.readLine()) != null){
System.out.println(message);
}
} catch (Exception e){
e.printStackTrace();
}
}
public ServiceReader(Scene scene){
this.scene = scene;
this.reader = scene.getReader();
}
}
public static void main(String[] args) {
TestClient outer = new TestClient();
Scene scene = outer.new Scene();
scene.go();
}
}
//
Подробнее здесь: https://stackoverflow.com/questions/798 ... connecting
Канал сокета не подключается ⇐ JAVA
Программисты JAVA общаются здесь
1768259844
Anonymous
Я начинаю с небольшого клиента чата, чтобы привыкнуть к сети, сокетам и прочему.
Мне удалось заставить код работать, когда он выполняется на той же машине, но когда код запускается на другом компьютере, следующий код:
SocketChannel schannel = SocketChannel.open(address);
не запускается. Кто-нибудь знает, почему?
Код не генерирует исключение при выполнении этой строки, он просто ничего не делает.
Код:
import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;
import java.io.*;
import java.nio.*;
import java.nio.channels.*;
import java.net.*;
import static java.nio.charset.StandardCharsets.UTF_8;
import java.util.concurrent.Executors;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.*;
public class TestClient // Chat Room TIME
{
static Scanner scanner = new Scanner(System.in);
class Scene{
boolean running = true;
private BufferedReader reader;
private PrintWriter writer;
public String moniker;
String m;
public void go(){
System.out.println("Please input your moniker:");
moniker = scanner.nextLine();
if(!Network()) {
System.out.println("Failed to connect");
return;
}
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.execute(new ServiceReader(this));
try {
while (running) {
String input = scanner.nextLine();
if (input.equalsIgnoreCase("/quit")) {
running = false;
break;
}
SendChat(input);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
executor.shutdownNow();
}
}
public BufferedReader getReader(){
return reader;
}
public boolean Network(){
try{
System.out.println("Which port? Please input an integer");
String Stringport = scanner.nextLine();
int intport = Integer.valueOf(Stringport);
System.out.println("What is the IP address of the Server?");
String ipa = scanner.nextLine();
System.out.println("Details Received");
InetSocketAddress address = new InetSocketAddress(ipa, intport);
System.out.println("Address Created");
SocketChannel schannel = SocketChannel.open(address);
//THE PROBLEM IS HERE!
System.out.println("Creating Socket");
writer = new PrintWriter(Channels.newWriter(schannel, UTF_8));
System.out.println("Writer Opened");
reader = new BufferedReader(Channels.newReader(schannel, UTF_8));
System.out.println("Reader Opened");
System.out.println("Networking Established, finished.");
return true;
}
catch (Exception e){
e.printStackTrace();
return false;
}
}
public void SendChat(String input){
if(writer == null) {
System.out.println("Not Connected to Server");
return;
}
String m = moniker+": "+input;
writer.println(m);
writer.flush();
if (writer.checkError())
{
System.out.println("Connection lost while sending.");
running = false;
}
}
}
public class ServiceReader implements Runnable{
private Scene scene;
private BufferedReader reader;
public void run(){
reader = scene.getReader();
String message;
try{
while ((message = reader.readLine()) != null){
System.out.println(message);
}
} catch (Exception e){
e.printStackTrace();
}
}
public ServiceReader(Scene scene){
this.scene = scene;
this.reader = scene.getReader();
}
}
public static void main(String[] args) {
TestClient outer = new TestClient();
Scene scene = outer.new Scene();
scene.go();
}
}
//
Подробнее здесь: [url]https://stackoverflow.com/questions/79866375/socket-channel-not-connecting[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия