public void CreateConnection() throws Exception {
try {
socket = new Socket(ip, port);
} catch (Exception e) {
e.printStackTrace();
if (socket != null)
socket.close();
throw e;
} finally {
}
}
public void sendMessage(String sendMessage) throws Exception {
try {
out = new DataOutputStream(socket.getOutputStream());
out.write( sendMessage.getBytes() );
} catch (Exception e) {
//System.out.println("www..eeeeeee.....");
e.printStackTrace();
if (out != null)
out.close();
throw e;
} finally {
}
}
public DataInputStream getMessageStream() throws Exception {
try {
getMessageStream = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
return getMessageStream;
} catch (Exception e) {
e.printStackTrace();
if (getMessageStream != null)
getMessageStream.close();
throw e;
} finally {
}
}
我把tcp接收发送写成了javabean,然后其他地方调用的是:
try{
ClientSocket1.IpSocket("192.168.5.244",8888);
ClientSocket1.CreateConnection();
ClientSocket1.sendMessage(Message);
for(int tt=0;tt<4;tt++)
{
isdata=ClientSocket1.getMessageStream_cx();
}
ClientSocket1.shutDownConnection();
}
catch(Exception e){
System.out.println("YUYUYUYUYUYUYUYUYUYUYUY");
}
现在我只能收到2包数据,然后就直接从异常里面出来了,对java下面的tcp没有研究,谁能帮助一下啊
try {
socket = new Socket(ip, port);
} catch (Exception e) {
e.printStackTrace();
if (socket != null)
socket.close();
throw e;
} finally {
}
}
public void sendMessage(String sendMessage) throws Exception {
try {
out = new DataOutputStream(socket.getOutputStream());
out.write( sendMessage.getBytes() );
} catch (Exception e) {
//System.out.println("www..eeeeeee.....");
e.printStackTrace();
if (out != null)
out.close();
throw e;
} finally {
}
}
public DataInputStream getMessageStream() throws Exception {
try {
getMessageStream = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
return getMessageStream;
} catch (Exception e) {
e.printStackTrace();
if (getMessageStream != null)
getMessageStream.close();
throw e;
} finally {
}
}
我把tcp接收发送写成了javabean,然后其他地方调用的是:
try{
ClientSocket1.IpSocket("192.168.5.244",8888);
ClientSocket1.CreateConnection();
ClientSocket1.sendMessage(Message);
for(int tt=0;tt<4;tt++)
{
isdata=ClientSocket1.getMessageStream_cx();
}
ClientSocket1.shutDownConnection();
}
catch(Exception e){
System.out.println("YUYUYUYUYUYUYUYUYUYUYUY");
}
现在我只能收到2包数据,然后就直接从异常里面出来了,对java下面的tcp没有研究,谁能帮助一下啊
解决方案 »
- 关于System.out.println()直接输出对象的引用
- 学JSP J2EE对数据结构 算法要求高吗
- 打包成jar文件后的运行
- 高分求教!!关于 PreparedStatement,想将表名也作为变量输入
- [求助]如何把这个APPLET保存到本地?
- java好学吗?
- 100分:誰有thinking in java 2 的中文電子書和例子代碼,給我一份吧?
- 是不是在applet里面不能访问数据库阿?能访问的话,怎么访问?要什么特别的处理吗?100分!
- 各位兄弟 谁有 powerZip 5.21 的注册码,小弟不胜感激!!
- bit-wise reverse
- java的命令行参数是怎么回事?
- 谁能说出这个统计方法中,remove(int i)与 remove(Object obj)的区别?
{
System.out.println("Exception:"+e.toString());
}
异常:Exception:java.io.EOFException
java.io.EOFException
at java.io.DataInputStream.readByte(Unknown Source)
at com.ClientSocket.getMessageStream_cx(ClientSocket.java:126)
at org.apache.jsp.Cj9011_005flldata_jsp._jspService(Cj9011_005flldata_jsp.java:147)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Unknown Source)具体的错误
for ( i = 0; i < 24; i++) {
//if(getMessageStream.read()!=-1)
mapArray[i] = getMessageStream.readByte();
}
使用了readByte就会出现异常,我在上面加了判断,还是一样,但是我如果封掉readbyte 的话,程序是能正常接收多包数据?
如果不用readbyte我该怎么来保存得到的数据呢???
BufferedReader socketReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String recvMsg = socketReader.readLine();
打印出来的数据,c服务程序下面发过来的多包程序,他一下子都打印出来了,说明他一下子全收过来了,所以当我多次去执行接受的时候,收不到数据了,所以出现异常?如果按我的理解,我就有疑问了?不是分多个包发过来的吗?那怎么来区别,还是程序上有那些要注意的地方
java socket下面没有多包概念?
for ( i = 0; i < 24; i++) {
//if(getMessageStream.read()!=-1)
mapArray[i] = getMessageStream.readByte();
}