解决问题的方法竟然是:
把BufferWriter换成PrintWrite就可以了,哇靠~ 这是怎么回事??难道BufferWriter和BufferReader有冲突?在BufferReader进行readLine()时,BufferWriter无法flush()和close()?怪怪
程序改成这样就没问题了,我的数据同步平台也可以运作了。
public class ServerThread extends Thread {
private int port;
public ServerThread(int port) {
this.port = port;
}
private boolean stop = false;
public void run() {
try {
ServerSocket server = new ServerSocket(port);
while (!stop) {
Socket client = server.accept();
BufferedReader read = new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter streamWriter = new PrintWriter(client.getOutputStream());//关键是这里
System.out.println("发送欢迎信息");
streamWriter.println("欢迎xx");
streamWriter.flush();//如果用BufferWriter这句话就不起作用,也发不出去,所以客户端也无法收到
String lineStr = read.readLine();
if ("开始".equals(lineStr)) {
System.out.println("开始接受数据!");
while (true) {
lineStr = read.readLine();
if ("结束".equals(lineStr)) {
break;
} else {
System.out.println("数据是" + lineStr);
}
}
}
streamWriter.close();
read.close();
client.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
public static void main(String[] args) {
Thread server = new ServerThread(10020);
server.start();
}
public boolean isStop() {
return stop;
}
public void setStop(boolean stop) {
this.stop = stop;
}
}
现在还遇到一个问题就是用java的jdbc在数据库生成trigger,竟然会报语法出错,不过还是在数据库中生成了trigger,而手工的用PL/SQL工具一运行就好了,这是怎么回事,怪~
具体是这样的:
stmt.executeUpdate(String triggerSql);
数据库schema中生成了trigger,但是报错状态(不是Disable状态)
然后用PL/SQL工具运行这个trigger,竟然没有任何问题
根据出错的提示信息我们发现好像是jdbc的语法不支持比较复杂的SQL,那我们如何用程序生成trigger啊??