Java 服务器生成一个txt文件,客户端编写
我有一个项目,它有一个创建空文本文件的服务器 一旦我的客户机停止写入此文件,服务器应读取并显示结果 我的问题是,客户端正在连接到服务器,但是客户端发送的任何文本都不会写入服务器端。此外,当我退出时,服务器不会退出 这就是我到目前为止所做的: 服务器Java 服务器生成一个txt文件,客户端编写,java,networking,client-server,Java,Networking,Client Server,我有一个项目,它有一个创建空文本文件的服务器 一旦我的客户机停止写入此文件,服务器应读取并显示结果 我的问题是,客户端正在连接到服务器,但是客户端发送的任何文本都不会写入服务器端。此外,当我退出时,服务器不会退出 这就是我到目前为止所做的: 服务器 导入java.io.BufferedReader; 导入java.io.BufferedWriter; 导入java.io.DataInputStream; 导入java.io.File; 导入java.io.FileWriter; 导入java.i
导入java.io.BufferedReader;
导入java.io.BufferedWriter;
导入java.io.DataInputStream;
导入java.io.File;
导入java.io.FileWriter;
导入java.io.IOException;
导入java.io.InputStreamReader;
导入java.io.ObjectInputStream;
导入java.io.ObjectOutputStream;
导入java.io.OutputStream;
导入java.io.OutputStreamWriter;
导入java.io.PrintStream;
导入java.io.PrintWriter;
导入java.net.ServerSocket;
导入java.net.Socket;
导入java.util.Scanner;
公共类服务器{
公共静态void main(字符串args[])引发IOException{
BufferedWriter out;//=new BufferedWriter(new FileWriter(“C://Users//Vagos//Desktop//file.txt”);
ServerSocket echoServer=null;
弦线;
数据输入流为;
打印流操作系统;
套接字clientSocket=null;
//尝试打开端口9999上的服务器套接字
试一试{
echoServer=新服务器套接字(55);
}
捕获(IOE异常){
系统输出打印ln(e);
}
//从ServerSocket创建套接字对象以侦听和接受
//联系。
//开放输入和输出流
试一试{
clientSocket=echoServer.accept();
is=新的DataInputStream(clientSocket.getInputStream());
os=新的打印流(clientSocket.getOutputStream());
out=new BufferedWriter(new FileWriter(“C://Users//Vagos//Desktop//file.txt”);
//只要我们接收到数据,就将数据回显到客户端。
while(true){
line=is.readUTF();
os.println(行);
os.flush();
写出(行);
out.flush();
}
}
捕获(IOE异常){
系统输出打印ln(e);
}
}
}
这是我的客户:
import java.io.*;
导入java.net.InetAddress;
导入java.net.ServerSocket;
导入java.net.Socket;
导入java.net.UnknownHostException;
导入java.util.Scanner;
公共类客户端{
公共静态void main(字符串[]args){
套接字smtpSocket=null;
DataOutputStream os=null;
DataInputStream为空;
弦乐;
扫描仪输入=新扫描仪(系统输入);
试一试{
smtpSocket=新套接字(“本地主机”,55);
os=新的DataOutputStream(smtpSocket.getOutputStream());
is=新的DataInputStream(smtpSocket.getInputStream());
}捕获(未知后异常e){
System.err.println(“不知道主机名”);
}捕获(IOE异常){
System.err.println(“无法获取到主机名的连接的I/O”);
}
if(smtpSocket!=null&&os!=null&&is!=null){
试一试{
做{
System.out.print(“写下客户端将发送的内容:”);
strout=in.nextLine();
os.writeBytes(strout);}
而(!strout.equals(“exit”);
os.close();
is.close();
smtpSocket.close();
}捕获(未知后异常e){
System.err.println(“尝试连接到未知主机:+e”);
}捕获(IOE异常){
System.err.println(“IOException:+e”);
}
}
}
};
试试这个
在您的服务器中
// Open input and output streams
try {
clientSocket = echoServer.accept();
is = new DataInputStream(clientSocket.getInputStream());
InputStreamReader ir = new InputStreamReader(is);
BufferedReader br = new BufferedReader(ir);
os = new PrintStream(clientSocket.getOutputStream());
out = new BufferedWriter(new FileWriter("C://Users//Vagos//Desktop//file.txt"));
// As long as we receive data, echo that data back to the client.
while (true) {
line = br.readLine();
System.out.println(line);
os.println(line);
os.flush();
if( line != null ){
out.write(line + '\n');
out.flush();
}
}
}
关于客户的“退出”部分,请在更改后重试while(!strout.equals(“exit”)代码>
到
while(!strout.equalsIgnoreCase(“退出”)代码>
希望这有帮助 今天我的老师上传了一个新项目,因为他做了一个错误的项目,我要做的项目与旧项目类似,但客户正在读或写一个0-911的txt,客户随机选择什么是使读o写如果选择读显示txt的数字如果选择写他随机写一个0-911的数字,如果选择100则停止
我成功了,但没什么能证明我是成功的
切断
客户
import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Random;
import java.util.Scanner;
public class client {
public static void main(String[] args) throws IOException {
Socket smtpSocket = null;
DataOutputStream os = null;
DataInputStream is = null;
String strout;
int number=0;
Random rand = new Random(System.currentTimeMillis());
Scanner in = new Scanner(System.in);
try {
smtpSocket = new Socket("localhost", 55);
os = new DataOutputStream(smtpSocket.getOutputStream());
is = new DataInputStream(smtpSocket.getInputStream());
} catch (UnknownHostException e) {
System.err.println("Don't know about host: localhost");
} catch (IOException e) {
System.err.println("Couldn't get I/O for the connection to: localhost");
}
int choice=2;//rand.nextInt(2);
if(choice==1){
int num=is.read();
System.out.println(num);
}
else if(choice==2){
try {
do{
number=rand.nextInt(911);
// System.out.println(number);
os.writeInt(number);
}while(number!=100);
os.close();
is.close();
smtpSocket.close();
} catch (UnknownHostException e) {
System.err.println("Trying to connect to unknown host: " + e);
} catch (IOException e) {
System.err.println("IOException: " + e);
}
}
}
}
是的,但当退出是说nul nul nul nul而不是停止时,nul、服务器或客户端会说什么。在您的服务器中还有一个while(true)
代码需要更改。您必须结束该循环,可能您可以这样做while(line!=null)
import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Random;
import java.util.Scanner;
public class client {
public static void main(String[] args) throws IOException {
Socket smtpSocket = null;
DataOutputStream os = null;
DataInputStream is = null;
String strout;
int number=0;
Random rand = new Random(System.currentTimeMillis());
Scanner in = new Scanner(System.in);
try {
smtpSocket = new Socket("localhost", 55);
os = new DataOutputStream(smtpSocket.getOutputStream());
is = new DataInputStream(smtpSocket.getInputStream());
} catch (UnknownHostException e) {
System.err.println("Don't know about host: localhost");
} catch (IOException e) {
System.err.println("Couldn't get I/O for the connection to: localhost");
}
int choice=2;//rand.nextInt(2);
if(choice==1){
int num=is.read();
System.out.println(num);
}
else if(choice==2){
try {
do{
number=rand.nextInt(911);
// System.out.println(number);
os.writeInt(number);
}while(number!=100);
os.close();
is.close();
smtpSocket.close();
} catch (UnknownHostException e) {
System.err.println("Trying to connect to unknown host: " + e);
} catch (IOException e) {
System.err.println("IOException: " + e);
}
}
}
}