请教一个java socket问题

问题描述

packagedbutil;importjava.io.*;importjava.net.*;publicclassSocketServer{ServerSocketss=null;Sockets=null;DataInputStreaminStream=null;DataOutputStreamoutStream=null;publicSocketServer(){try{init();}catch(Exceptione){System.out.println(e.toString());}}voidinit()throwsException{ss=newServerSocket(9999);}voidwaitForClient(){System.out.println("serverbegin");try{s=ss.accept();inStream=newDataInputStream(s.getInputStream());outStream=newDataOutputStream(s.getOutputStream());outStream.writeUTF("1");s.setSoTimeout(3000);waitData();}catch(Exceptione){System.out.println(e.toString());}}voidwaitData(){while(true){try{Stringstr=inStream.readUTF();System.out.println("Serveraccept:"+str);intnu=Integer.parseInt(str)+1;if(nu>20){System.out.println("Sendend!");s.close();inStream.close();outStream.close();break;}else{str=Integer.toString(nu);outStream.writeUTF(str);}}catch(Exceptione){System.out.println("error:"+e.toString());break;}}}publicstaticvoidmain(String[]args){SocketServersocketserver=newSocketServer();socketserver.waitForClient();}}packagedbutil;importjava.net.*;importjava.io.*;publicclassSocketClient{Sockets=null;DataInputStreaminStream=null;DataOutputStreamoutStream=null;publicSocketClient(){try{init();waitData();}catch(Exceptione){System.out.println(e.toString());}}voidinit()throwsException{s=newSocket("localhost",9999);//把这里的IP改成你运行SocketServer.class的IPinStream=newDataInputStream(s.getInputStream());outStream=newDataOutputStream(s.getOutputStream());s.setSoTimeout(3000);}voidwaitData(){while(true){try{Stringstr=inStream.readUTF();System.out.println("Clientaccept:"+str);str=Integer.toString(Integer.parseInt(str)+1);outStream.writeUTF(str);}catch(EOFExceptione){System.out.println("Clientterminal.");break;}catch(Exceptione){System.out.println(e.toString());break;}}}publicstaticvoidmain(String[]args){SocketClientsocketClient1=newSocketClient();}}为何我执行client时提示eofexception,然后server也断开了呢。。

解决方案

解决方案二:
代码里写了注释packagecom;importjava.io.DataInputStream;importjava.io.DataOutputStream;importjava.net.ServerSocket;importjava.net.Socket;publicclassSocketServer{ServerSocketss=null;Sockets=null;DataInputStreaminStream=null;DataOutputStreamoutStream=null;publicSocketServer(){try{init();}catch(Exceptione){System.out.println(e.toString());}}voidinit()throwsException{ss=newServerSocket(9999);}voidwaitForClient(){System.out.println("serverbegin");try{s=ss.accept();inStream=newDataInputStream(s.getInputStream());outStream=newDataOutputStream(s.getOutputStream());outStream.writeUTF("1");s.setSoTimeout(30000);waitData();}catch(Exceptione){System.out.println(e.toString());}}voidwaitData(){while(true){try{Stringstr=inStream.readUTF();System.out.println("Serveraccept:"+str);intnu=Integer.parseInt(str)+1;//侦听客户端的回应如果是exit就退出if(str.equals("exit")){s.close();inStream.close();outStream.close();}//下面的代码你传了strstr在加啊客户端加了传给服务端,服务端加了又才传给客户端==20就close();了//if(nu>20){//System.out.println("Sendend!");//s.close();//inStream.close();//outStream.close();//break;//}/*else{str=Integer.toString(nu);outStream.writeUTF(str);}*/}catch(Exceptione){System.out.println("error:"+e.toString());break;}}}publicstaticvoidmain(String[]args){SocketServersocketserver=newSocketServer();socketserver.waitForClient();}}

packagecom;importjava.io.DataInputStream;importjava.io.DataOutputStream;importjava.io.EOFException;importjava.net.Socket;importjava.util.Scanner;publicclassSocketClient{Sockets=null;DataInputStreaminStream=null;DataOutputStreamoutStream=null;publicSocketClient(){try{init();waitData();}catch(Exceptione){System.out.println(e.toString());}}voidinit()throwsException{s=newSocket("127.0.0.1",9999);//把这里的IP改成你运行SocketServer.class的IPinStream=newDataInputStream(s.getInputStream());outStream=newDataOutputStream(s.getOutputStream());//s.setSoTimeout(3000);}voidwaitData(){while(true){try{Stringstr=inStream.readUTF();System.out.println("Clientaccept:"+str);str=Integer.toString(Integer.parseInt(str)+1);System.out.println("请输入exit退出:");//控制台输入exitScanners=newScanner(System.in);Stringst=s.nextLine();outStream.writeUTF(st);}catch(EOFExceptione){System.out.println("Clientterminal.");break;}catch(Exceptione){System.out.println(e.toString());break;}}}publicstaticvoidmain(String[]args){SocketClientsocketClient1=newSocketClient();}}

解决方案三:
catch(Exceptione){System.out.println("error:"+e.toString());break;}将break去掉
解决方案四:
多谢,好像还是有点问题啊

时间: 2024-11-08 23:31:48

请教一个java socket问题的相关文章

线程中止-请教一个JAVA线程的奇怪问题

问题描述 请教一个JAVA线程的奇怪问题 在学习JAVA线程时候的遇到一个很奇怪的现象.让我们先来看代码 public class TestThread { public static void main(String[] args) { IRun ir = new IRun(); Thread it = new Thread(ir); it.start(); try { Thread.sleep(1000); } catch (InterruptedException ex) { Logger

java-新手请教一个JAVA问题,急用。

问题描述 新手请教一个JAVA问题,急用. 我用JAVA在一个包中写了MultiThreadMatrix.java和Jiemian.java.MultiThreadMatrix.java是一个并行矩阵计算程序,怎么让Jiemian.java中的一个按钮b3,点击b3执行MultiThreadMatrix.java,并将结果输出在Jiemian.java的文本框中.图中RUN就是b3 MultiThreadMatrix.java的打印的结果是,先让你输入想建立的线程个数,然后输出每个线程计算哪一行

泛型-请教一个JAVA的基础问题

问题描述 请教一个JAVA的基础问题 有如下的一个接口,叫做:GenericDao,有几点不理解: 1.虽然知道E,K,V都是泛型,但是一直不太理解有什么用,比如:>这段代码有什么用,实现什么功能?如果不写会有什么影响? 2.为什么在类的定义中还可以extends,一般不都是 class A1 extends A,这么写么?为什么可以class A1 package com.patsnap.common.bean; import com.patsnap.common.entity.DBVersi

c语言-请教一个关于socket的问题

问题描述 请教一个关于socket的问题 代码中有这样一段 if ((m_UDPSndrSocket = WSASocket(AF_INET, SOCK_DGRAM, IPPROTO_UDP, NULL, 0, WSA_FLAG_OVERLAPPED)) == INVALID_SOCKET) { AfxMessageBox("Failed to create UDPSocket"); return FALSE; } 然后出现了这样的错误 error C2065: 'WSASocket'

c++-请教一个VC++SOCKET的问题

问题描述 请教一个VC++SOCKET的问题 bind(ss, (SOCKADDR*)&ddd, sizeof(ss)); 请问下这句话中的,第二个参数为什么要加取地址呀?难道SOCKADDR*不足以把 ddd转换成指针吗?还要加个取地址,好像别的地方的用法都不用加取地址符 解决方案 建议参考官方资料.https://msdn.microsoft.com/en-us/library/ms737550 解决方案二: 进行类型转换,符合函数调用的参数.bind的第二个参数有类型要求.你需要对应的转换

请教一个Java的Swing技术问题.

问题描述 高手,我弄了一个Java的Swin类型,源代码如下:importjava.awt.Component;importjava.awt.Rectangle;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.ItemEvent;importjava.awt.event.ItemListener;importjava.io.File;importjava.net.U

请教一个perl socket的问题

问题描述 我有一个运用perlsocket来传输数据的程序我想把它转化为java程序不知道perl的recv(socket,scalar,length,flags)如何转化成相对应的Java程序我尝试用了BufferedReaderinFromBox=newBufferedReader(newInputStreamReader(socket.getInputStream);当接受数据的时候我用inFromBox.read但是效果不好,老是接受不到值,使得程序block.有人知道吗?

最近遇到的一个Java Socket通信的小问题

问题描述 JavaSocket通信我也是最近才开始接触,写的是跟一种光纤测量设备通信的代码.总体代码很简单,主要是规则略微复杂(厂家的定的规则,代码现在公司如果需要我明天发出来),反正最后拼接成一个byte数组发送给设备也就OK了,但问题来了.我发的命令是一个给设备校时的命令,就是把设备里的时间改成计算机当前的时间.现在情况是我只发送一次的话设备时间没有改变,但我如果写一个死循环,就是while(true){...}那种,不停发送,就可以改变设备时间,但具体是第几次改变的也是不定的.这让我很头疼

请教一个java web 启动服务问题?

问题描述 我是struts1+hibernate+spring结合的项目想做一个项目启动的时候就向数据库里面插入一条数据.1.集成strutsPlugIn时,这个WebApplicationContextwac=WebApplicationContextUtils.getWebApplicationContext(event.getServletContext());CompanyServicecompanyService=(CompanyService)wac.getBean("company