1,Socket客户端和服务端互相访问,客户端刚发一个信息,服务器直接中断。
import java.net.*;
import java.io.*;
/*
需求:建立一个文本转换服务器。
客户端给服务器端发送文本,服务端会将文本转成大写再返回给客户端。
而且客户端可以不断的进行文本转换。当客户端输入over时,转换结束。
*/
class TransClient {
public static void main(String[] args)throws Exception
{
Socket s=new Socket("127.0.0.1",10006);
//定义读取键盘数据的流对象
BufferedReader buffr=
new BufferedReader(new InputStreamReader(System.in));
//定义目的,将数据写入到Socket输出流。发给服务端。
BufferedWriter buffout=
new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
//定义一个socket读取流,读取服务端返回的大写信息
BufferedReader bufin= new BufferedReader(new InputStreamReader(s.getInputStream()));
String line=null;
while((line=buffr.readLine())!=null)
{
if(line.equals("over"))
break;
buffout.write(line);//line写出的数据没有回车符
buffout.newLine();//需要newLine
buffout.flush();//刷新后输出流才有数据
String str=bufin.readLine();
System.out.println("Server:"+str);
}
buffr.close();
s.close();
}
}
class TransServer {
public static void main(String[] args)throws Exception
{
//接受客户端发来的数据
ServerSocket ss=new ServerSocket(10006);
Socket s=ss.accept();
String ip=s.getInetAddress().getHostAddress();
System.out.println(ip+"connected");
//读取Socket读取流中的数据
BufferedReader buffin=
new BufferedReader(new InputStreamReader(s.getInputStream()));
//目的,socket输出流。将大写数据写入到Socket输出流,并发送给客户端。
BufferedWriter buffout=
new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
String line=null;
while((line=buffin.readLine())!=null)//readline会判断有没有回车符,没有回车符会继续等待读。
{
System.out.println(line);
buffout.write(line.toUpperCase());
buffout.newLine();
buffout.flush();
}
s.close();
ss.close();
}
}
I am writing this program now, and I have encountered the same problem when sending information on the client. How should I deal with it?
你的server socket就accept一次,就能通信一次啊