Java客户机/服务器读写不需要';不工作,没有错误
Client.javaJava客户机/服务器读写不需要';不工作,没有错误,java,string,client-server,utf,Java,String,Client Server,Utf,Client.java package Client; import java.io.*; import java.net.*; class Client { /* To send string to server use "out.print(data)" To use info sent from server use "in.readLine()" */ int port = 1234; String hostname =
package Client;
import java.io.*;
import java.net.*;
class Client {
/*
To send string to server use "out.print(data)"
To use info sent from server use "in.readLine()"
*/
int port = 1234;
String hostname = "localhost";
String input,output;
public void send(String text) {
try {
Socket skt = new Socket(hostname, port); /*Connects to server*/
BufferedReader in = new BufferedReader(new
InputStreamReader(skt.getInputStream())); /*Reads from server*/
System.out.println("Server:" + in.readLine());
PrintWriter out = new PrintWriter(skt.getOutputStream(), true);
out.print(text); /*Writes to server*/
skt.close();
out.close(); /*Closes all*/
in.close();
}
catch(Exception e) {
System.out.print("Error Connecting to Server\n");
}
}
public static void main(String args[]) {
Client c = new Client();
c.send("Server is online"); //sends message to server
}
}
Server.java
package Server;
import java.io.*;
import java.net.*;
class Server {
/*
To send string to client use "out.print(data)"
To use info sent from client use "in.readLine()"
*/
int port = 1234;
String input,output;
public void send(String text) {
try {
ServerSocket srvr = new ServerSocket(port);
Socket skt = srvr.accept(); /*Waiting for Connection from client*/
System.out.print("Server has connected!\n");
PrintWriter out = new PrintWriter(skt.getOutputStream(), true);
out.print(text); /*Write/Send to Client*/
BufferedReader in = new BufferedReader(new
InputStreamReader(skt.getInputStream())); /*Read from Client*/
System.out.println("Client:" + in.readLine());
out.close();
in.close();
skt.close(); /*Closes all*/
srvr.close();
} catch( Exception e) {
System.out.print("Error Connecting\n");
}
}
public static void main(String args[]) {
Server s = new Server();
s.send("Client is online"); //sends a message to client
}
}
为什么什么都不做
服务器已连接代码>
当我从服务器和客户端发送时发生
s.send("X is online");
哪一个应该在另一面阅读并在cmd中打印出来
(这是因为printwriter之后激活了bufferreader,但没有将其拾取?如果是,我如何解决此问题?一种可能性-请查看此处的顺序:
PrintWriter out = new PrintWriter(skt.getOutputStream(), true);
out.print(text);
skt.close();
out.close();
在关闭写入程序之前先关闭插槽。这意味着,如果写入程序有任何缓冲数据,它就没有机会写入它。试着按照你关东西的顺序来切换——最后关上插座
(请注意,通常情况下,您会将它们放在finally
块中……)
编辑:然后我注意到你没有在服务器端打印一行。您应该同时进行这两项更改。一种可能性-查看此处的订购:
PrintWriter out = new PrintWriter(skt.getOutputStream(), true);
out.print(text);
skt.close();
out.close();
在关闭写入程序之前先关闭插槽。这意味着,如果写入程序有任何缓冲数据,它就没有机会写入它。试着按照你关东西的顺序来切换——最后关上插座
(请注意,通常情况下,您会将它们放在finally
块中……)
编辑:然后我注意到你没有在服务器端打印一行。您应该同时进行这两项更改。除非您发送换行符,否则您的BufferedReader#readLine
调用将无限期阻塞。替换
out.print(text);
与
要匹配来自客户端和服务器的BufferedReader#readLine
调用。除非发送换行符,否则您的BufferedReader#readLine
调用将无限期阻塞。替换
out.print(text);
package client;
import java.io.*;
import java.net.*;
class Client {
/*
To send string to server use "out.print(data)"
To use info sent from server use "in.readLine()"
*/
int port = 1234;
String hostname = "localhost";
String input,output;
public void send(String text) {
try {
Socket skt = new Socket(hostname, port); /*Connects to server*/
BufferedReader in = new BufferedReader(new
InputStreamReader(skt.getInputStream())); /*Reads from server*/
System.out.println("Server:" + in.readLine());
PrintWriter out = new PrintWriter(skt.getOutputStream(), true);
out.println(text); /*Writes to server*/
out.close(); /*Closes all*/
in.close();
skt.close();
}
catch(Exception e) {
System.out.print("Error Connecting to Server\n");
}
}
public static void main(String args[]) {
Client c = new Client();
c.send("Server is online"); //sends message to server
}
}
package server;
import java.io.*;
import java.net.*;
class Server {
/*
To send string to client use "out.print(data)"
To use info sent from client use "in.readLine()"
*/
int port = 1234;
String input,output;
public void send(String text) {
try {
ServerSocket srvr = new ServerSocket(port);
Socket skt = srvr.accept(); /*Waiting for Connection from client*/
System.out.println("Server has connected!\n");
PrintWriter out = new PrintWriter(skt.getOutputStream(), true);
out.println(text); /*Write/Send to Client*/
BufferedReader in = new BufferedReader(new
InputStreamReader(skt.getInputStream())); /*Read from Client*/
System.out.println("Client:" + in.readLine());
out.close();
in.close();
skt.close(); /*Closes all*/
srvr.close();
} catch( Exception e) {
System.out.print("Error Connecting\n");
}
}
public static void main(String args[]) {
Server s = new Server();
s.send("Client is online"); //sends a message to client
}
}
与
匹配来自客户端和服务器的BufferedReader#readLine
调用
package client;
import java.io.*;
import java.net.*;
class Client {
/*
To send string to server use "out.print(data)"
To use info sent from server use "in.readLine()"
*/
int port = 1234;
String hostname = "localhost";
String input,output;
public void send(String text) {
try {
Socket skt = new Socket(hostname, port); /*Connects to server*/
BufferedReader in = new BufferedReader(new
InputStreamReader(skt.getInputStream())); /*Reads from server*/
System.out.println("Server:" + in.readLine());
PrintWriter out = new PrintWriter(skt.getOutputStream(), true);
out.println(text); /*Writes to server*/
out.close(); /*Closes all*/
in.close();
skt.close();
}
catch(Exception e) {
System.out.print("Error Connecting to Server\n");
}
}
public static void main(String args[]) {
Client c = new Client();
c.send("Server is online"); //sends message to server
}
}
package server;
import java.io.*;
import java.net.*;
class Server {
/*
To send string to client use "out.print(data)"
To use info sent from client use "in.readLine()"
*/
int port = 1234;
String input,output;
public void send(String text) {
try {
ServerSocket srvr = new ServerSocket(port);
Socket skt = srvr.accept(); /*Waiting for Connection from client*/
System.out.println("Server has connected!\n");
PrintWriter out = new PrintWriter(skt.getOutputStream(), true);
out.println(text); /*Write/Send to Client*/
BufferedReader in = new BufferedReader(new
InputStreamReader(skt.getInputStream())); /*Read from Client*/
System.out.println("Client:" + in.readLine());
out.close();
in.close();
skt.close(); /*Closes all*/
srvr.close();
} catch( Exception e) {
System.out.print("Error Connecting\n");
}
}
public static void main(String args[]) {
Server s = new Server();
s.send("Client is online"); //sends a message to client
}
}
以上代码对我有效
看看你有没有遗漏什么
以上代码对我有效
看看你是否遗漏了什么我试着在两个类上切换它们,所以skt是最后一个,writer是第一个,这没有什么区别,而且当我把它们放在finally块中时,它们找不到符号“out.,in.,srvr.”等。@String.userName:你不能在没有其他工作的情况下把它们放在finally块中。。。但是,即使抛出异常,也应该确保关闭所有内容。很公平,我以前从未使用过finally块,也不知道我尝试在两个类上切换它们,因此skt是最后一个,writer是第一个,这没有什么区别,而且当我将它们放在finally块中时,它们找不到符号“out.,in.,srvr”etc.@String.userName:你不能在没有其他工作的情况下把它们放在finally块中。。。但是,即使抛出异常,也应该确保关闭所有程序。很公平,我以前从未使用过finally块,也不知道该如何解决您的问题,不是吗?奇怪,在这里进行了测试,效果很好。尝试清理您的项目并重新运行。这应该已经解决了您的问题,没有?奇怪,在这里测试并运行良好。尝试清理您的项目并重新运行。我将您的客户端版本与我的进行了交换,没有任何更改,但当我将您的服务器与我的服务器进行交换时,它工作正常!然而,它们之间的唯一区别是“try{”下的换行和“ServerSocket skt…”之前的空格。我不知道问题是什么:OI将您的客户端版本与我的进行了交换,没有任何更改,但当我将您的服务器与我的服务器进行交换时,它仍然有效!然而,它们之间的唯一区别是“try{”下的换行和之前的空格“ServerSocket skt…”我不知道问题是什么:O