java.lang.ClassCastException: java.net.SocketInputStream cannot be cast to java.lang.CharSequence

import javax.swing.*;
import java.io.Serializable;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import com.mysql.jdbc.PreparedStatement;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.net.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.lang.*;
public class serve3 extends JFrame implements ActionListener {
Connection con = null;
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/aaa";
String user = "root";
String password = "123456";

JTextArea jta=null;
JTextField jtf=null;
JButton jb=null;
JPanel jp=null;
JScrollPane jsp=null;
PrintWriter pw=null;
public static void main(String[] args) {
// TODO Auto-generated method stub
serve3 s=new serve3();

}
public serve3(){
jta=new JTextArea();
jsp=new JScrollPane(jta);
jtf=new JTextField(20);
jb=new JButton("发送");
jb.addActionListener(this);
jp=new JPanel();
jp.add(jtf);
jp.add(jb);
this.add(jsp,"Center");
this.add(jp,"South");
this.setSize(400,300);
this.setTitle("QQ简易版 服务器");
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
try {
Class.forName(driver);
System.out.println("H");
Connection conn = DriverManager.getConnection(url, user,
password);
Statement stat = conn.createStatement();
PreparedStatement ps1 = (PreparedStatement) conn
.prepareStatement("insert mytable (file) values(?)");
//File file1 = new File("E:\\wps office\\ppt\\Decline.doc");
//InputStream inn = new FileInputStream(file1);

ServerSocket ss=new ServerSocket(9899);
Socket s=ss.accept();
System.out.println("连接成功");
InputStream inn=s.getInputStream();
//InputStreamReader isr=new InputStreamReader(s.getInputStream());
//BufferedReader br=new BufferedReader(isr);
//pw=new PrintWriter(s.getOutputStream(),true);
//
//while(true){
//
//String info=br.readLine();
//jta.append("客户端 对 服务器 说:"+info+"\r\n");
//
//}

ps1.setBinaryStream(1, inn,((CharSequence) inn).length());
ps1.executeUpdate();

} catch (Exception e) {
e.printStackTrace();
// TODO: handle exception
}
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource()==jb){
String info=jtf.getText();
jta.append("服务器 对 客户端 说:"+info+"\r\n");
pw.println(info);
jtf.setText("");
}
}
}
求大神指教啊

第1个回答  2013-04-28
这句有问题:
ps1.setBinaryStream(1, inn,((CharSequence) inn).length());
inn是InputStream对象,不能直接强制类型转化为CharSequence。
这个inn外面包裹一个转换流再包裹一个缓冲流,如下:
BufferedReader reader = new BufferedReader(new InputStreamReader(inn));
然后通过reader.readLine()方法一行一行的读出文本。追问

ps1.setBinaryStream(1, inn,((CharSequence) inn).length());
我是想独处inn的字节数,有木有什么方法?

第2个回答  2013-04-28
你在输出“链接成功”字样之后的到了Socket的读取流并用inn引用了该流,下面ps1.setBinaryStream(1, inn,((CharSequence) inn).length());要将流转换为CharSequence字符序列,必须不行啊!追问

ps1.setBinaryStream(1, inn,((CharSequence) inn).length());
我是想独处inn的字节数,有木有什么方法?

追答

可以将inn流读取的数据写入到ByteArrayOutputStream流中,然后通过ByteArrayOutputStream的toByteArray()方法将其转化为byte数组,这样就可以得到inn中的字节数,需要写出时,直接将该byte数组通过字节流写出即可!

追问

能留个qq吗?有些奇葩的问题想要问你

本回答被提问者采纳

...java.net.SocketInputStream cannot be cast to java.lang.CharSequ...
ps1.setBinaryStream(1, inn,((CharSequence) inn).length());inn是InputStream对象,不能直接强制类型转化为CharSequence。这个inn外面包裹一个转换流再包裹一个缓冲流,如下:BufferedReader reader = new BufferedReader(new InputStreamReader(inn));然后通过reader.readLine()方法一行一行的读出文本。

Java编写服务器,遇java.net.SocketException: Software caused con...
出现这个情况一般是客户端那边写完流后,就立即关闭了socket。服务器端这边还没读完,所以就报错了,你可以让客户端那边写完对象后,等服务器端回一个状态给客户端。客户端再关闭流。

JAVA的socket和inputstream不能在finally中关闭。
Socket s = null;BufferedReader bis = null;try{ s = new Socket(); bis = new ...}这样就可以在 finally 中关闭了。另外,如果你使用了 Java 7 或之后的版本,可以将资源放到 try 中,例如 try(Socket s = new...;BufferedReader bis = new...;){}这样就可以不用写 finally ...

...socket编程,报错为 java.net.SocketInputStream.read(Unknown Source...
class ServerThread extends Thread{ Socket socket;DataOutputStream out=null;DataInputStream in=null;String s;ServerThread(Socket s){ socket=s;try { out=new DataOutputStream(socket.getOutputStream());in=new DataInputStream(socket.getInputStream());} catch (IOException e) { \/\/ TODO...

刚开始学java网络编程 Exception in thread "main" java.net.Connection...
socket = new Socket("localhost", 4000);在localhost处localhost\/127.0.0.1这样用了?书上的意思这两个是等价的,用一个就行了...晕死.Socket socket=new Socket(addr,Jnet1.PORT);你这句话里的addr在前面有没有定义?Jnet1.PORT这个在前面有没有定义?先把socket通信原理弄懂了好不?

传FTP时候,执行ftp.disconnect() 抛错 java.lang.NoClassDefFoundError...
我们主要方向是对比测试环境和生产环境上的 jar 配置的不同,这个问题的出现一般有两种情况:你的某个类库在服务器上不同的位置有多个不同的版本。另一个不是当前报错的类有多个不同的版本导致类加载层次错乱。总之,如果每一个类在服务器上都只有一个版本的话是最安全的。一般来说,服务器会自带常用...

at java.net.SocketInputStream.socketRead0(Native Method)
java.net.SocketInputStream.socketRead0(Native Method)at java.net.SocketInputStream.read(SocketInputStream.java:129)这样的问题,只不过我的是查询数据库引起的,没找到原因。我执行了你上面的代码,没有报错误,main方法执行返回false。会不会你的报错就是执行环境的原因,你换台电脑试一试呢。

java服务器端用传输给客户端文件流(fileinputstream),客户端应该如何接 ...
socket:在操作系统内核中它代表网络连接的一个端点(endpoint),在应用程序中它代表一个打开的文件。socket pair唯一确定的一条网络连接,socket pair就是客户端socket和服务端socket的一个组合。也就是客户端ip和port与服务端ip和port的组合。一条网络连接也就是一条通信的信道,tcp连接代表的信道是全...

...Read timed out at java.net.SocketInputStream.socketRead0(Native...
Read timed out是指读超时,this.tcpClient.getInputStream();,这个读取到了流,但是对端迟迟没有发送相应,导致读超时。

...Connection reset at java.net.SocketInputStream.read(Unknown Sour...
是你要读取的那个输入流的资源不存在,可能是路径或是地址错了吧

相似回答
大家正在搜