为什么浙江移动手机营业厅营业厅显示socked closed

给位大神 请帮小弟看看下面代码是什么原因老报 Socket closed异常 ,只能读取客户端数据不能发送_百度知道
给位大神 请帮小弟看看下面代码是什么原因老报 Socket closed异常 ,只能读取客户端数据不能发送
try {socket=ssocket.close();} catch (IOException e) {e;&#47.nextLine();/S
String text=&quot: Socket closed/
try {byte content[]=new byte[1024].write(text.
ssocket=new ServerSocket(8080).read(content)).main(accept.SocketOutputS&#47.accept().getBytes());
try {/收到结果&
System!=-1){
text1=new String(/}
}报错如下&#47.nextLine();
}public static void main(String args[]){
scanner=new Scanner(System,temp).println(text);} catch (IOException e) {e,0;is=socket.out.printStackTrace();while((temp=is.net.println(text1).SocketE
while(.write(Unknown Source)} catch (IOException e) {e;&#47.in).printStackTrace();
os.start();os=}
new Thread(new accept())public void run() {
String text1=/&#47.SocketOutputS&#47.socketWrite(Unknown Source)at java.flush().
}is.printStackTrace().printStackTrace().java.getInputStream().out.getOutputStream();
} catch (IOException e) {
e.hasNext()){&#47.close()
提问者采纳
把os.write那块代码放到run的try里面,2个close写到try的finally里面
我试过了 不行的
run{try{socket定义is定义os定义is块代码os块代码 }catch(e){}finally{os关闭is关闭socke关闭}}
很是奇怪 这样不报错了 但是还是不能接受还是不能显示接受到数据
提问者评价
谢谢你了,之前不会给评价现在学会了,谢谢你的指导
其他类似问题
为您推荐:
其他1条回答
Socket closed,太消耗内存了,看看你自己的代码是不是出现死循环,或者重启java编辑工具
没有出现死循环的 情况
您可能关注的推广
socket的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁数据库死锁DBComms.receive socket closed 该链接已关闭 写的项目突然就异常了_百度知道
数据库死锁DBComms.receive socket closed 该链接已关闭 写的项目突然就异常了
页面报错显示如下:com.mi俯迹碘克鄢久碉勋冬魔crosoft.sqlserver.jdbc.SQLServerException: 使用 DBComms.receive 方法期间发生异常。操作:socket closed。上下文:(377250) [Thread[http-80-Processor144,5,main], IO:65c79, Dbc:null]。PktNum:0。TotalReceived:0。PktSize:4,096。java.lang.NullPointerException
有没有高手来解决?还可以追加200分!!
提问者采纳
那是一个BUG 建议BS用oracle
提问者评价
其他类似问题
为您推荐:
死锁的相关知识
其他3条回答
只知道最后那句空指针 是不是哪的引用不对
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁07-18&15:47:31.116:&W/System.err(29860):&java.net.SocketException:&recvfrom&failed:&ECONNRESET&(Connection&reset&by&peer)
07-18&15:47:31.117:&W/System.err(29860):& at&libcore.io.IoBridge.maybeThrowAfterRecvfrom(IoBridge.java:589)
07-18&15:47:31.117:&W/System.err(29860):& at&libcore.io.IoBridge.recvfrom(IoBridge.java:551)
07-18&15:47:31.117:&W/System.err(29860):& at&java.net.PlainSocketImpl.read(PlainSocketImpl.java:490)
07-18&15:47:31.117:&W/System.err(29860):& at&java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:46)
07-18&15:47:31.117:&W/System.err(29860):& at&java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:240)
07-18&15:47:31.117:&W/System.err(29860):& at&java.io.InputStream.read(InputStream.java:163)
07-18&15:47:31.117:&W/System.err(29860):& at&java.io.BufferedInputStream.fillbuf(BufferedInputStream.java:142)
07-18&15:47:31.118:&W/System.err(29860):& at&java.io.BufferedInputStream.read(BufferedInputStream.java:309)
07-18&15:47:31.118:&W/System.err(29860):& at&com.example.imagesocketclient.ClientThread$1.run(ClientThread.java:113)
07-18&15:47:31.118:&W/System.err(29860):&Caused&by:&libcore.io.ErrnoException:&recvfrom&failed:&ECONNRESET&(Connection&reset&by&peer)
07-18&15:47:31.118:&W/System.err(29860):& at&libcore.io.Posix.recvfromBytes(Native&Method)
07-18&15:47:31.118:&W/System.err(29860):& at&libcore.io.Posix.recvfrom(Posix.java:131)
07-18&15:47:31.118:&W/System.err(29860):& at&libcore.io.BlockGuardOs.recvfrom(BlockGuardOs.java:164)
07-18&15:47:31.118:&W/System.err(29860):& at&libcore.io.IoBridge.recvfrom(IoBridge.java:548)
07-18&15:47:31.118:&W/System.err(29860):& ...&7&more
07-18&15:47:31.118:&D/dalvikvm(29860):&threadid=13:&exiting
07-18&15:47:31.118:&D/dalvikvm(29860):&threadid=13:&bye!
回复讨论(解决方案)
每次请求之后关闭这个连接&
客户端向服务器发出请求,&另外一个连接将端口占用了,&就会出现这种异常;
每次请求之后关闭这个连接&
客户端向服务器发出请求,&另外一个连接将端口占用了,&就会出现这种异常;
我还不是很懂,因为我关了跟没关,结果好像没有区别,我f附程序上来,你帮我看看!
public&class&ImageclientActivity&extends&Activity&{
ImageView&imageView1=null,&imageView2=Button&TextView&&TextView&
&&&&//定义与服务器通信的子线程
&&&&ClientThread&clientT
&&&&@Override
protected&void&onCreate(Bundle&savedInstanceState)&{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_imageclient);
position=(TextView)&findViewById(R.id.position);
infor=(TextView)&findViewById(r);
imageView1&=&(ImageView)&findViewById(R.id.imageView1);&&
imageView2&=&(ImageView)&findViewById(R.id.imageView2);
&&&&btn&=&(Button)&findViewById(R.id.button);
&&&&handler=new&Handler(){
&&&& @Override
&&&& public&void&handleMessage(Message&msg){
if(msg.what==0x123){
Bitmap&bmp1,bmp2;
Bundle&imadata=msg.getData();
double&lngnow=imadata.getDouble(&lng&);
double&latnow=imadata.getDouble(&lat&);
String&cond=imadata.getString(&cond&);
bmp1=imadata.getParcelable(&bmp1&);
bmp2=imadata.getParcelable(&bmp2&);
&&&&imageView1.setImageBitmap(bmp1);
&&&&imageView2.setImageBitmap(bmp2);
&&&&position.setText(&图片相机经度为:&&+lngnow+&&&纬度为:&&+latnow);
&&&&infor.setText(cond);
&&&&clientThread=new&ClientThread(handler);&
&&&&&btn.setOnClickListener(new&OnClickListener()&{
&&&& @Override
&&&&&&&&&&&&public&void&onClick(View&v)&{
new&Thread(clientThread).start();&&//这句放在这儿会不会有问题?1.&每按一次按钮会不会产生很多线程&&2。是不是应该放在&&clientThread=new&ClientThread(handler);&之后呢!?.这句话放在这儿,第一次数据好像可以发送出去,第二次就不行了。
showImage();
&&&&&&&&});
&&&&Thread.setDefaultUncaughtExceptionHandler(new&Thread.UncaughtExceptionHandler()&{
public&void&uncaughtException(Thread&thread,&Throwable&ex)&{
//&TODO&Auto-generated&method&stub
System.out.println(ex.getLocalizedMessage());
finish(); }
public&void&showImage()&{
//&TODO&Auto-generated&method&stub
LocationManager&locationManager&=&(LocationManager)&getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
3000,&10,&mLocationListener01);
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER,&3000,&10,
mLocationListener01);
public&LocationListener&mLocationListener01&=&new&LocationListener(){
public&void&onLocationChanged(Location&location)&{
//&TODO&Auto-generated&method&stub
double&lat&=&0;&//纬度
double&lng&=&0;&//经度
float&rate=0;&&&//速度
float&dirt=0;&&&//方向
if&(location&!=&null)&{
lat&=&location.getLatitude();
lng&=&location.getLongitude();
rate=location.getSpeed();
dirt=location.getBearing();
infor.setText(lat+&&+lng);
Log.i(&location&,&&经纬度为:&+lng+&&&+lat);
Toast.makeText(getApplicationContext(),&&定位内容为空,请稍等...&,&
Toast.LENGTH_LONG).show();
//将数据封装成Message,然后发送给Handler
Message&msg=new&Message();
msg.what=0x345;
Bundle&gpsdata=new&Bundle();
gpsdata.putDouble(&lng&,&lng);
gpsdata.putDouble(&lat&,&lat);
gpsdata.putFloat(&rate&,&rate);
gpsdata.putFloat(&dirt&,&dirt);
msg.setData(gpsdata);
clientThread.reHandler.sendMessage(msg);//???????????????
Log.i(&locaton数据到子线程&,&clientThread.reHandler.sendMessage(msg);&);
catch&(Exception&e){
e.printStackTrace();
public&void&onProviderDisabled(String&provider)&{
//&TODO&Auto-generated&method&stub
public&void&onProviderEnabled(String&provider)&{
//&TODO&Auto-generated&method&stub
public&void&onStatusChanged(String&provider,&int&status,&Bundle&extras)&{
//&TODO&Auto-generated&method&stub
public&boolean&onCreateOptionsMenu(Menu&menu)&{
//&Inflate&the&&this&adds&items&to&the&action&bar&if&it&is&present.
getMenuInflater().inflate(R.menu.imageclient,&menu);
客户端子线程:(其中服务器是C的)
public&class&ClientThread&&implements&Runnable&{
final&static&int&ID=1;
final&static&int&B_HEADLINE=16;&&&//返回命令协议头长度
final&static&int&B_BODYC=56;&&&&&&//返回数据图片协议中固定字节长度
private&String&hostN
private&int&portN
private&Socket&
//向UI线程发送消息
private&Handler&
//接受UI线程的消息
public&Handler&reH
DataOutputStream&out=
BufferedInputStream&in=
byte[]&outdata=new&byte[172];{
outdata[0]=(byte)&0x80;
outdata[1]=0x09;&&//command
outdata[2]=0x02;&&//type
int&outdataline=156;
indexout=encodeIntBigEndian(outdata,outdataline,12,4);
int&id=ID;
indexout=encodeIntBigEndian(outdata,id,indexout,4);
outdata[indexout]=1;//0---&上行&&1---&下行
//indexout+=4;
public&ClientThread(Handler&handler){
this.handler=
public&void&run()&{
//&TODO&Auto-generated&method&stub
socket=new&Socket();
SocketAddress&address=new&InetSocketAddress(hostName,portNum);
socket.connect(address,&3000);
Log.i(&Socked是否连接:&,socket.isConnected()
+&***true&if&the&socket&is&connected,&false&otherwise&);
}catch(UnknownHostException&e){
System.out.println(&---&未知名的主机:&+hostName+&异常&);
}catch(IOException&e){
System.out.println(&hostName=&&&+&hostName+&&portNum=&&+portNum
+&---&IO异常&+e.getMessage()&);
out&=&&new&DataOutputStream(socket.getOutputStream());&&&&&&//输出流&
in&=&new&BufferedInputStream(socket.getInputStream());&&&&&&//输入流
&&&&&&&&&&&&&&&&&&&
new&Thread(){
public&void&run()&{
Log.i(&Socked输入流是否被关闭:&,socket.isInputShutdown()+
&***true&if&reading&from&this&socket&&
+&&is&not&possible&anymore,&false&otherwise&);
&&&& //socket.setSoTimeout(1000);
&&&& byte&backhead[]=new&byte[B_HEADLINE];
&&&& int&len=0;
&&&& while(len&B_HEADLINE){
len+=in.read(backhead,len,B_HEADLINE-len);}
&&&& Log.i(&indata&,&收到协议头&);
&&&& //首先接受返回数据中的命令协议头(16个字节)
&&&& if(backhead[0]==0xf0&backhead[1]==0x01){
//返回数据成功
int&bodyimlen=bytesToInt(backhead,12);//接受数据
byte&body[]=new&byte[bodyimlen];
int&len1=0;
while(len1&bodyimlen){
len1+=in.read(body,len1,bodyimlen-len);}
System.out.println(&状态为:&+body[0]);
byte[]&cond=new&byte[body[1]];//body[1]为状态描述长度
for(int&i=0;i&body[1];i++){
cond[i]=body[i+B_BODYC];
System.out.println(&状态描述为:&+new&String(cond));
//读取显示图片相机位置
double&lng=getDouble(body,4);&&//x
double&lat=getDouble(body,12);&&//y
int&imalen1=bytesToInt(body,20);//获取第一张图片数据长度
Bitmap&bmp1,bmp2=
if(imalen1!=0){
ByteArrayOutputStream&outPut&=&new&ByteArrayOutputStream();&&
&&&&&&&&&&&&&&&&&&&&bmp1&=&BitmapFactory.decodeByteArray(body,&B_BODYC,&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&imalen1);&&
&&&&&&&&&&&&&&&&&&&&press(CompressFormat.JPEG,&100,&outPut);
Message&msg=handler.obtainMessage();
&&&&&&&&&&&&&&&&&&&&msg.what=0x123;
&&&&&&&&&&&&&&&&&&&&Bundle&imadata=new&Bundle();
imadata.putDouble(&lng&,&lng);
imadata.putDouble(&lat&,&lat);
imadata.putString(&cond&,&new&String(cond));
imadata.putParcelable(&bmp1&,&bmp1);
imadata.putParcelable(&bmp2&,&bmp2);
msg.setData(imadata);
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&msg.sendToTarget();
&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&in.close();
&&&&&&&&&&&&&&&& out.close();
&&&& }else{
System.out.println(&返回数据失败!&);
}&catch&(IOException&e)&{&&
&&&&&&&&&&&&&&&&&&&&e.printStackTrace();&&
&&&&&&&&&&&&&&&&}&
}.start();
Looper.prepare();
reHandler=new&Handler(){
public&void&handleMessage(Message&msg){
if(msg.what==0x345){
indexout=16;
Bundle&gps=msg.getData();
double&lng=gps.getDouble(&lng&);
double&lat=gps.getDouble(&lat&);
float&rate=gps.getFloat(&rate&);
float&dirt=gps.getFloat(&dirt&);
indexout=putFloat(outdata,rate,indexout);
indexout=putFloat(outdata,dirt,indexout);
indexout=putDouble(outdata,lng,indexout);
indexout=putDouble(outdata,lat,indexout);
Log.i(&子线程收到locaton数据&,&子线程收到locaton数据&+&&&&+&Bundle.getData();&);
Log.i(&Socked输出流是否关闭:&,socket.isOutputShutdown()
+&***true&if&writing&to&this&socket&&
+&&is&not&possible&anymore,&false&otherwise&);
Log.i(&Socked是否被关闭:&,socket.isClosed()+
&***true&if&the&socket&is&closed,&false&otherwise&);
out.write(outdata);
out.flush();
Log.i(&outdata&,&发送到服务器&);
Log.i(&Socked输出流是否关闭:&,socket.isOutputShutdown()
+&***true&if&writing&to&this&socket&&
+&&is&not&possible&anymore,&false&otherwise&);
Log.i(&Socked是否被关闭:&,socket.isClosed()+
&***true&if&the&socket&is&closed,&false&otherwise&);
}catch(Exception&e){
e.printStackTrace();
Looper.loop();
Log.d(&aaaa&,&Looper.loop()之后.....&);
&&&&}catch(SocketTimeoutException&e1){
System.out.println(&网络连接超时!&);
}catch(Exception&e){
e.printStackTrace();
&&&&}&finally&{&&
&&&&&&&&&&&&try&{&&
&&&&&&&&&&&&
&&&&&&&&&&&&&&&&socket.close();&&&&&//socket以及流的关闭问题:要不要关闭,放在什么位置比较正确?
&&&&&&&&&&&&}&catch&(IOException&e)&{&&
&&&&&&&&&&&&&&&&e.printStackTrace();&&
&&&&&&&&&&&&}&
&&&&&&&&}&&//=====
new&Thread(clientThread).start();&&//这句放在按钮事件内会不会有问题?1.&每按一次按钮会不会产生很多线程&&2。是不是应该放在&&clientThread=new&ClientThread(handler);&之后呢!?.可是这句话放在这儿,第一次数据好像可以发送出去,第二次就不行了。
socket以及流的关闭问题:要不要关闭,放在什么位置比较正确?
好像是服务器没给我一个数据引起的。自学socket 出现socket closed 是怎么回事_百度知道
自学socket 出现socket closed 是怎么回事
我有更好的答案
1. Windows服务器运行自动更新。具体为什么自动更新运行后,就会消耗系统这么多的SOCKET
连接,我还搞不清楚。但是有一点,自动更新肯定会占用网络带宽和CPU,在服务器上,我觉得应该是关闭自动更新的,采用人工更新的方法。
2.机器中了木马。木马会打开很多后门,创建大量的连接,包括局域网肉鸡上的,还有外网的。这也会导致机器出现无法上网,或者程序无法连接。在搜索到的结果中,大量的结果都是采用的SQLSERVER数据库服务器,这是很容易招来木马和病毒的服务器,大部分是SQLSERVER出问题,不是偶然的。
3.虚拟内存配置过低。第一次发现这个问题后,我到现场打开机器,确实报了一个虚拟内存的错误,说虚拟内容不足。
4.有不当程序创建了大量的短连接,由于程序的不健壮,导致
SOCKET处于忙碌或者TIME_...
其他类似问题
为您推荐:
socket的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁WebClient在多线程、使用代理情况下 socket closed 问题的一个解决办法[htmlunit]
WebClient在多线程、使用代理情况下 socket closed 问题的一个解决办法[htmlunit]
通过 WebClient 的内置浏览器,可以执行页面抓取工作,有时可能需要设置代理,WebClient webClient = new WebClient(BrowserVersion.x);webClient.setProxyConfig(ProxyConfig pc);在单线程情况下,使用这样创建的webClient不会有问题:客户端到代理服务器的连接能够很有次序的建立、关闭。
考虑这样的情况:多个线程并发地访问 WebClient,可能就会报下面的异常:
[Thread-7] DEBUG org.apache.http.impl.conn.tsccm.ConnPoolByRoute
- Closing connection [HttpRoute[{}-&http://192.168.5.29:3128-&http://58.223.139.151:8080]][null]........ 10:31:32,926 [Thread-8] DEBUG org.apache.http.impl.conn.tsccm.ConnPoolByRoute
- Total connections kept alive: 0 10:31:32,926 [Thread-8] DEBUG org.apache.http.impl.conn.tsccm.ConnPoolByRoute
- Total issued connections: 0 10:31:32,926 [Thread-8] DEBUG org.apache.http.impl.conn.tsccm.ConnPoolByRoute
- Total allocated connection: 0 out of 20 10:31:32,926 [Thread-8] DEBUG org.apache.http.impl.conn.tsccm.ConnPoolByRoute
- No free connections [HttpRoute[{}-&http://192.168.5.29:3128-&http://58.223.139.151:8080]][null] 10:31:32,926 [Thread-8] DEBUG org.apache.http.impl.conn.tsccm.ConnPoolByRoute
- Available capacity: 2 out of 2 [HttpRoute[{}-&http://192.168.5.29:3128-&http://58.223.139.151:8080]][null] 10:31:32,926 [Thread-8] DEBUG org.apache.http.impl.conn.tsccm.ConnPoolByRoute
- Creating new connection [HttpRoute[{}-&http://192.168.5.29:3128-&http://58.223.139.151:8080]] 10:31:32,926 [Thread-6] DEBUG org.apache.http.impl.client.DefaultHttpClient
- socket closedjava.net.SocketException: socket closedat java.net.SocketInputStream.socketRead0(Native Method)at java.net.SocketInputStream.read(Unknown Source)at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:130)at org.apache.http.impl.io.SocketInputBuffer.fillBuffer(SocketInputBuffer.java:127)at org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:233)at org.apache.http.impl.conn.LoggingSessionInputBuffer.readLine(LoggingSessionInputBuffer.java:100)at org.apache.http.impl.conn.DefaultResponseParser.parseHead(DefaultResponseParser.java:98)at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:210)at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:271)at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:227)at org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:209)at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:292)at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:126)at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:483)at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:641)at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:597)at com.gargoylesoftware.htmlunit.HttpWebConnection.getResponse(HttpWebConnection.java:134)at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseFromWebConnection(WebClient.java:1406)at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseFromWebConnection(WebClient.java:1460)at com.gargoylesoftware.htmlunit.WebClient.loadWebResponse(WebClient.java:1325)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:304)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:370)
异常信息显示:thread-6使用webclient时,检测到 socket closed异常,查看上面的异常,存在 socket (http://192.168.5.29:3128-&http://58.223.139.151:8080)被 thread-7 关闭的情况,thread-8 创建了新 socket,可能之后某个时间点,socket又被关闭,导致 thread-6 报socket closed异常。通过使用ThreadLocal为不同的线程创建各自独立的 WebClient 对象,就能避免上述问题:
[java] view plaincopy
private ThreadLocal&WebClient& client = new ThreadLocal&WebClient&() {
protected synchronized WebClient initialValue(){
WebClient webClient = new WebClient(version);
webClient.set...;
return webC
public void setWebClient(WebClient wc) {
client.set(wc);
public WebClient getWebClient() {
return client.get();
如果您想提高自己的技术水平,认识同行朋友、开拓技术视野,请加入QQ群:
Powered by
& 2014 &&&联系本站:

我要回帖

更多关于 浙江移动营业厅 的文章

 

随机推荐