java 网络编程 为啥采用BufferedReader服务器读不到数据。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 网络编程 为啥采用BufferedReader服务器读不到数据。相关的知识,希望对你有一定的参考价值。
服务器:
public class Serverdemo
public static void main(String [] args) throws IOException
System.out.println("服务器启动.");
final ServerSocket ss = new ServerSocket(10000);
while(true)
final Socket s = ss.accept();
Thread t = new Thread(new Runnable()
@Override
public void run()
try
InputStream in = s.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
// byte [] buf = new byte[1024];
//
// int len = in.read(buf);
// String str = new String(buf,0,len);
System.out.println("接收到::"+br.readLine());
OutputStream out = s.getOutputStream();
out.write("知道了!".getBytes());
s.close();
catch (Exception e)
);
t.start();
客户端:
public class Clientdemo
public static void main(String[] args) throws UnknownHostException, IOException
System.out.println("客户端启动.");
Socket s = new Socket("127.0.0.1", 10000);
OutputStream out = s.getOutputStream();
out.write("哥们跪了!".getBytes());
InputStream in = s.getInputStream();
byte [] buf = new byte[1024];
int len = in.read(buf);
String str = new String(buf,0,len);
System.out.println(str);
s.close();
FileWriter fileWriter = new FileWriter("mytext");
fileWriter.write(str);
fileWriter.close();
服务器用注释的代码就可以读取数据了,为什么?
1,网络编程传输的数据都是以二进制格式来传输的。
2,所以传输流第一层必须使用字节流而不能使用字符流
3,后面就可以使用BufferedReader套接在字节流外层了
例:
BufferedReader clientReader = new BufferedReader(new InputStreamReade(socket.getInputStream()));//读数据PrintStream printStream = new PrintStream(socket.getOutputStream()); // 发送数据
printStream.println ("xxxxxxx");发送一个带换行符的数据
clientReader.readline();//接收带换行符的数据
4,您也可以试试使用BufferedInputStream。
参考技术A 这样写吧,
BufferedReader clientReader = new BufferedReader(new InputStreamReade(socket.getInputStream()));//读数据
PrintStream printStream = new PrintStream(socket.getOutputStream()); // 发送数据
printStream.println ("xxxxxxx");发送一个带换行符的数据
clientReader.readline();//接收带换行符的数据
就可以了独到数据了额本回答被提问者采纳 参考技术B br.readLine() 是按行读取 没有收到换行符br.readLine()认为一行没结束在等换行符所以没有输出。
改用br.read()方法读读看。 参考技术C 用PrintWriter对象来写数据,通常它和BufferedReader是结合使用的,你试试 参考技术D 把bufferedReader写到request.getParameter前面试试看,先用request获取参数会截取掉bufferedReader中的数据
JAVA-JDBC连接数据库一个问题:我采用通过事务提交添加属性值,为啥没有虽然没有添加,但是ID自动增加
老师说的是:在数据库添加上面,特别是用在银行转账实例最好用事务提交,因为当这边添加语句(如转账)时遇到系统异常或是网络异常,就不会出现一个执行了,另外一边没有执行(转账的就是如果这边转账好,于到异常,但是这边又扣了,那么没有收到)。只有当两边同时正确执行才执行;一边执行,另外一边没有执行两边都不执行,自动回滚。
如下语句:我有两个插入语句,如果故意把其中一条输入错误,虽然两条都不能添加;单是我的数据表里面的id序列却自动增加了,下面的34.35.然后我错误的运行了两次,自动增加了ID主键的序列。如下图:
问题:我的id序列在数据库里面设置了自动增加和主键。怎么我下面的代码中,插入一条语句,使得我错误一条运行后,id'的序列号也不能增加!!这样才是真正的事务添加啊!!谢谢了
//通过事务提交添加属性值
private void TransactionAddGradeByName() throws Exception
Connection connection = ConnectionStart.getConnection();
System.out.println("事务添加方法数据驱动程序加载成功");
System.out.println("事务添加方法数据库连接成功!");
//关闭自动提交
connection.setAutoCommit(false);
Statement statement = connection.createStatement();
statement.executeUpdate("insert into grade(name,score)"+"values('n9',100);");
statement.executeUpdate("insert into grade(name,score)"+"values('n10',110);");
// statement.executeBatch();//执行批量SQL语句
connection.commit();//手动提交
connection.setAutoCommit(false);
//关闭JDBC对象
ConnectionClose.close(statement,connection);
queryAll(); //
为什么没有回滚呀? 但是我其中一条插入语句错误,另外一条也没有执行,只是id编号自动增加了两个!不知道这算不算回滚呢?
~那如果想实现真正的回滚,连主键编号都不会增加该加入什么语句呢?
以上是关于java 网络编程 为啥采用BufferedReader服务器读不到数据。的主要内容,如果未能解决你的问题,请参考以下文章