socket 连接问题

问题描述

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading;usingSystem.Diagnostics;usingSystem.Net;usingSystem.Net.Sockets;usingSystem.ComponentModel;usingSystem.Windows.Forms;namespaceDadabaseToExcelTest{classTempSampleInput{privateSockettemperSampleSocket=null;//温度扫描仪套接字privatestringhostName="";//主机IP地址privatestringportNum="";//端口号privateboolthreadRunningFlag=false;//线程运行标志privateGlobalVariant.EFeedbackSignalfeedBackSignal;//信号反馈类型intelapsed=0;//测量时间用intinputPeriod=500;//采样间隔时间publicintSampleCount=0;publicTempSampleInput(){}//初始配置采样函数publicvoidInitialize(){this.hostName="192.168.2.100";this.portNum="5025";this.feedBackSignal=GlobalVariant.FeedbackSignal;//信号采集通道this.threadRunningFlag=true;Threadthread=newThread(newThreadStart(InitializeSocket));thread.IsBackground=true;thread.Start();}//初始化套接字privatevoidInitializeSocket(){try{if(temperSampleSocket==null||temperSampleSocket.Connected==false){IPEndPointipe=newIPEndPoint(IPAddress.Parse(hostName),int.Parse(portNum));SockettempSocket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);//创建Socket新实例tempSocket.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.ReceiveTimeout,5000);//设置Socket连接超时为5秒tempSocket.Connect(ipe);//尝试套接字连接if(tempSocket.Connected){temperSampleSocket=tempSocket;TempInputProc();}}else{if(temperSampleSocket.Connected==true)//若套接字已连接上,则继续采集{TempInputProc();}}}catch(System.Net.Sockets.SocketExceptionsEx){Trace.WriteLine("SocketExceptionInTemperatureSampleInput.InitializeSocket:"+sEx.Message);stringsMessage=trimMessage(sEx.Message,20,'n');MessageBox.Show(sMessage,"1586ALAN端口异常",MessageBoxButtons.OK,MessageBoxIcon.Warning);}catch(Exceptionex){Trace.WriteLine("UnexpectedexceptioninTemperatureSampleInput.InitializeSocket:"+ex.Message);}}//温度采集函数privatevoidTempInputProc(){StopwatchswReturnTime=newStopwatch();Parse(temperSampleSocket,"ROUT:SCAN(@3,4)"//扫描路径Trace.WriteLine("扫描路径设置");Parse(temperSampleSocket,"INIT:CONT1");//测试中,应根据测试用传感器进行温度扫描仪配置Trace.WriteLine("启动扫描");//Thread.Sleep(2000);//此处挂起三秒?while(threadRunningFlag){swReturnTime.Reset();swReturnTime.Start();Trace.WriteLine("开始读取数据");//Parse(temperSampleSocket,)stringstr=Parse(temperSampleSocket,"FETCH?");string[]arrayStr=str.Split(',');//按逗号将返回的数据组分开//GlobalVariant.TemperatureOutputData[0]=GlobalVariant.TemperatureOutputData[1]=//GlobalVariant.TemperatureOutputData[2]=GlobalVariant.TemperatureOutputData[3]=0;//初始化采集数据,0表示未采集数据if(arrayStr[1]=="C")//如果返回的第二个数为C,表示摄氏度,代表已采到数据,根据返回的第三个数即通道数来对应赋值。{switch(arrayStr[2]){case"1":{GlobalVariant.TemperatureOutputData[0]=Convert.ToDouble(arrayStr[0]);break;}case"2":{GlobalVariant.TemperatureOutputData[1]=Convert.ToDouble(arrayStr[0]);break;}case"3":{GlobalVariant.TemperatureOutputData[2]=Convert.ToDouble(arrayStr[0]);break;}case"4":{GlobalVariant.TemperatureOutputData[3]=Convert.ToDouble(arrayStr[0]);break;}default:{break;}}}Trace.WriteLine("通道1数据"+GlobalVariant.TemperatureOutputData[0]+"n"+"通道2数据"+GlobalVariant.TemperatureOutputData[1]+"n"+"通道3数据"+GlobalVariant.TemperatureOutputData[2]+"n"+"通道4数据"+GlobalVariant.TemperatureOutputData[3]);swReturnTime.Stop();elapsed=(int)swReturnTime.ElapsedMilliseconds;stringnowTime=GetCurrentTime();Trace.WriteLine("CurrentTime:"+nowTime+",WaitTime:"+elapsed+","+str);dataFlag=true;}Parse(temperSampleSocket,"INIT:CONT0");//停止扫描temperSampleSocket.Close();}//Socket发送指令privatestringParse(SockettemperSampleSocket,stringcommand){try{Trace.WriteLine("表示已连接上");Byte[]data=System.Text.Encoding.ASCII.GetBytes(command);//转换为ASCII码temperSampleSocket.Send(data);//发送命令Byte[]endCRLF={(Byte)'r',(Byte)'n'};//终止命令temperSampleSocket.Send(endCRLF);//发送终止命令Trace.WriteLine("发送终结指令一次");//测试用if(command.IndexOf("?")>=0){for(inti=0;i<20;i++)Thread.Sleep(inputPeriod);returnresponse(temperSampleSocket);}if(command.IndexOf("0")>=0){temperSampleSocket.Close();}return"";}catch(System.Net.Sockets.SocketExceptionsEx){Trace.WriteLine("SocketExceptionInTemperatureSampleInput.Parse:"+sEx.Message);return"";}catch(Exceptionex){Trace.WriteLine("UnexpectedexceptionInTemperatureSampleInput.Parse:"+ex.Message);return"";}}privatestringresponse(Socketclient){try{Byte[]data=newByte[512];//缓冲区大小stringresponseData="";intbyteCount=0;do{//将client返回的数据存入缓冲区,如果没有可读取的数据,//则Receive方法将一直处于阻止状态,直到数据可用,返回值为接受的字节数byteCount=client.Receive(data);responseData+=System.Text.Encoding.ASCII.GetString(data,0,byteCount);//将字节数组中某个范围的字节解码为一个字符串}while(responseData.IndexOf('n')<0);//如果没收到CRLF,表示回复还没有结束,应继续等待Trace.WriteLine("responseData:"+responseData);returnresponseData;}catch(System.Net.Sockets.SocketExceptionsEx){Trace.WriteLine("SocketExceptionInTemperatureSampleInput.response:"+sEx.Message);return"";}catch(Exceptionex){Trace.WriteLine("UnexpectedexceptionInTemperatureSampleInput.response:"+ex.Message);return"";}}}在System.Net.Sockets.SocketException中第一次偶然出现的“System.dll”类型的异常SocketExceptionInTemperatureSampleInput.response:由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。“DatabaseToExcelTest.vshost.exe”(托管(v4.0.30319)):已加载“C:WINDOWSMicrosoft.NetassemblyGAC_MSILmscorlib.resourcesv4.0_4.0.0.0_zh-Hans_b77a5c561934e089mscorlib.resources.dll”在System.IndexOutOfRangeException中第一次偶然出现的“DatabaseToExcelTest.exe”类型的异常UnexpectedexceptioninTemperatureSampleInput.InitializeSocket:索引超出了数组界限。第一次尝试连接设备,会报以上错误,但重启程序,运行通过,求大神指导

解决方案

解决方案二:
仅仅是一个连接错误结果你却把你的全部代码放了上来而且还是没有放在这个里面的

谁愿意来看啊如果是连接不上什么的就去看看你的Connect方法到底是怎么回事学会排查问题去找到报出你上面错误的具体代码是在哪一行然后去看看那一行到底在做什么传入的是什么样的数据
解决方案三:
看是在哪儿报的数组越界,估计是传入了空值之类的吧

时间: 2024-12-02 03:40:25

socket 连接问题的相关文章

andord socket连接网站,怎么获取网页数据

问题描述 andord socket连接网站,怎么获取网页数据 可以连上baidu.com ,但是到readline(),就卡助了...怎么获取数据阿,或者是显示出百度的主页,求救

Linux下Socket连接超时的一种实现方法

目前各平台通用的设置套接字(Socket)连接超时的办法是: 创建套接字,将其设置成非阻塞状态. 调用connect连接对端主机,如果失败,判断当时的errno是否为EINPROGRESS,也就是说是不是连接正在进行中,如果是,转到步骤3,如果不是,返回错误. 用select在指定的超时时间内监听套接字的写就绪事件,如果select有监听到,证明连接成功,否则连接失败. 以下是Linux环境下的示例代码: #include <stdlib.h> #include <stdio.h>

C# Socket连接请求超时机制实现代码分享

 这篇文章主要介绍了C# Socket连接请求超时机制实现,下面提供代码分享,大家可以参考使用 .Net的System.Net.Sockets.TcpClient和System.Net.Sockets.Socket都没有直接为Connect/BeginConnect提供超时控制机制.因此,当服务器未处于监听状态,或者发生网络故障时,客户端连接请求会被迫等待很长一段时间,直到抛出异常.默认的等待时间长达20~30s..Net Socket库的SocketOptionName.SendTimeout

android-Android偶发socket连接失败问题!!!求大神帮忙

问题描述 Android偶发socket连接失败问题!!!求大神帮忙 启动程序让程序自动登录,在自动登录时会偶发连接失败,然后页面就会卡在第一个界面, 不知道怎么解决一下,在线等大神. 09-08 09:45:57.976: W/System.err(23019): java.net.ConnectException: failed to connect to hk.server.zeepson.com/23.97.74.18 (port 8443) after 30000ms: isConne

安卓源码-安卓代码无法socket连接个人笔记本服务器~一直没能解决这个问题,求帮助

问题描述 安卓代码无法socket连接个人笔记本服务器~一直没能解决这个问题,求帮助 服务器代码: import java.awt.FlowLayout; import java.awt.Frame; import java.awt.TextArea; import java.awt.TextField; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.BufferedR

服务器-笔记本没办法接收到android客户端的socket连接

问题描述 笔记本没办法接收到android客户端的socket连接 服务器是java写的,在笔记本上面运行.用java的客户端倒是可以连接,但是android写的就不行了.双方程序都是没问题的,台式机测试过. 试过用wifi连接,用网线连接都不行.还有一个问题就是在网上查的ip跟网络连接上面的ip完全不一样 解决方案 啥叫"在网上查的ip跟网络连接上面的ip完全不一样"?android的socket就是java里面滴.据你描述,问题可能出在ip上吧,另外端口也注意. 解决方案二: 你的

socket-安卓 Socket通信,Socket连接不上,程序就在真机崩溃但在模拟器上正常

问题描述 安卓 Socket通信,Socket连接不上,程序就在真机崩溃但在模拟器上正常 class ReceiveData extends Thread { int i=1; private void reconnect( ) { Log.i("第"+i+"次连接","reconnect刚开始执行"); try { Log.i("第"+i+"次连接","Socket之前"); Sock

c++用socket连接,如何把服务器的本地文件夹目录传给客户端

问题描述 c++用socket连接,如何把服务器的本地文件夹目录传给客户端 c++用socket连接,如何把服务器的本地文件夹目录传给客户端,并且提供下载,求助 解决方案 1.定义客户端和服务器间通信协议 如针对你的应用: (1)客户向服务器请求目录结构: (2)服务器向客户端返回目录结构: (3)客户端向服务器请求下载指定目录或文件. 2.服务器通过遍历等方式获得目录结构 3.编程实现:定义消息类型.数据结构.数据收发.... 解决方案二: 文件目录很容易,可以system("dir>1

java socket手机通信-关于java的问题:手机用socket连接电脑的服务端时老出现文件找不到的错误,求解决

问题描述 关于java的问题:手机用socket连接电脑的服务端时老出现文件找不到的错误,求解决 30C 解决方案 也可以私聊我.扣扣1944687725 解决方案二: 解决方案三: 你那个斜杠是不是写反了 passwdinput.dat 解决方案四: 你仔细看看出错的提示, 是读文件的时候找不到,对应的代码是在ServerThread.java的51行然后,你把路径改为绝对路径试一试,如果可以了,就是你相对路径的根目录不对.保证passwd文件夹在你的执行目录下 解决方案五: 右键 prope

socket连接和http连接的区别

相信不少初学手机联网开发的朋友都想知道Http与Socket连接究竟有什么区别,希望通过自己的浅显理解能对初学者有所帮助. 首先一定要明白: HTTP协议:简单对象访问协议,对应于应用层  ,HTTP协议是基于TCP连接的 tcp协议:    对应于传输层 ip协议:     对应于网络层  TCP/IP是传输层协议,主要解决数据如何在网络中传输:而HTTP是应用层协议,主要解决如何包装数据. Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过S