黑马程序员技术交流社区
标题:
关于Tcp读取标记问题
[打印本页]
作者:
北冥有鱼
时间:
2014-3-12 18:17
标题:
关于Tcp读取标记问题
客户端
String line=null;
line=bufr.readLine();
out.write(line);
out.newLine();
s.shutdownOutput();
复制代码
服务端
String name;
name=in.readLine();
复制代码
写入输出流之后,new了一行,,,服务端readLine应该可以的呀????
模拟客户端登陆问题,,,全部代码如下
客户端
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
class UserLogin {
public static void main(String[] args) {
Socket s=null;
BufferedReader bufr=null;
try {
s=new Socket("192.168.8.100",10008);
bufr=new BufferedReader(new InputStreamReader(System.in));
BufferedWriter out=
new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
BufferedReader in=
new BufferedReader(new InputStreamReader(s.getInputStream()));
String line=null;
line=bufr.readLine();
out.write(line);
out.newLine();
s.shutdownOutput();
line=in.readLine();
System.out.println(line);
} catch (Exception e) {
// TODO: handle exception
}finally{
if (s!=null) {
try {
s.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (bufr!=null) {
try {
bufr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
复制代码
服务端
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
class LoginServer {
public static void main(String[] args) throws IOException {
ServerSocket ss=new ServerSocket(10008);
while (true) {
Socket s=ss.accept();
new Thread(new ServerLogin(s)).start();
}
}
}
class ServerLogin implements Runnable{
private Socket s;
boolean flag=false;
ServerLogin(Socket s){
this.s=s;
}
public void run(){
File file=new File("D:\\myclass\\6.txt");
BufferedReader bufr=null;
try {
String ip=new String(s.getInetAddress().getHostAddress());
System.out.println(ip+":"+"正在尝试登录");
bufr=new BufferedReader(new FileReader(file));
BufferedWriter out=
new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
BufferedReader in=
new BufferedReader(new InputStreamReader(s.getInputStream()));
String line=null;
String name;
name=in.readLine();
while ((line=bufr.readLine())!=null) {
if (line.equals(name)) {
flag=true;
break;
}
}
if (flag) {
System.out.println(name+"登陆成功");
out.write(ip+":"+name+"登录成功");
}else{
System.out.println(name+"登录失败");
out.write("用户名错误");
out.newLine();
}
s.shutdownOutput();
} catch (Exception e) {
e.toString();
throw new RuntimeException("客户登录失败");
}finally{
if (bufr!=null) {
try {
bufr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
复制代码
作者:
一诺千金
时间:
2014-3-12 18:51
缓冲----------没刷!!flush
作者:
北冥有鱼
时间:
2014-3-12 19:54
一诺千金 发表于 2014-3-12 18:51
缓冲----------没刷!!flush
嗯,是这问题。。。。。。我一直以为那个啥socket.shutdown****有类似作用来着。。。:'(:'(:'(
作者:
Teale
时间:
2014-3-12 22:55
一眼看过去就知道没flush... {:3_52:} 只要定义了缓冲区必须要刷新 close方法在关闭之前会刷新。 s.shutdownOutput(); API:禁用此套接字的输出流。对于 TCP 套接字,任何以前写入的数据都将被发送,并且后跟 TCP 的正常连接终止序列。 只能表示都写进了缓存区,所以即使关闭,缓冲区里依然有数据。 禁用和关闭概念不一样。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2