socket方法(socket connect方法)

      最后更新:2023-10-09 09:38

      socket发送,一般怎么个方法

      首先建议使用一个线程向所有客户端发送消息; 在写一个方法发送消息, 方法里面需要 消息和socket 参数; Thread tSend= new Thread(SendAll);private void SendAll() { //遍历所有的Socket,调用Send(string msg,Socket socket)方法 //不知道你的Socket放到哪里,如果放到集合就遍历集合挨个调用 }private void Send(string msg,Socket socket) { byte[] buffer = Encoding.Default.GetBytes(msg); socket.Send(buffer); }

      socket发送,一般怎么个方法

      如何建立"socket"连接?

      一般socket链接有以下两种方式:长(常)链接和短链接。 长链接:当数据发送完成后socket链接不断开。一直保留到异常或者是程序退出为止 ,这种方式的好处是不用每次去发起连接断开,在速度上可以比短连接要快一些,但是相 对来说对服务器的资源压力也要大些。长链接用的范围很广,比如游戏系统,qq等等,长 (常)链接一般还需要定时向服务器ping数据,以保证socket链接畅通。当ping不通服务 器时,需要重新开启链接。短链接:当一次数据发送完毕后,主动断开链接,每次发送数据都要一次链接、断开 操作,这种方式的好处是:对服务器的资源占用相对来说比较小,但是由于每次都要重新 链接,速度开销上也比较大,这种方式对于那种不需要经常与服务器交互的情况下比较适 用。上面两种方法在用户量非常大的情况下都存在着很大的不足,因此,考虑可以用 一种折衷的办法,那就是使用socket的连接池。程序一开始初始化创建若干数量的长链接。给他们设置一个标识位,这个标识位表示 该链接是否空闲的状态。当需要发送数据的时候,系统给它分配一个当前空闲的链接。同 时,将得到的链接设置为“忙”,当数据发送完毕后,把链接标识位设置为 “闲”,让系统可以分配给下个用户,这样使得两种方式的优点都充分的发挥 出来了。用户数量足够多的时候,只需要动态增加链接池的数量即可。下面我们用具体的程序来讲解下:首先声明一个socket类:public class XieGouSocket{public Socket m_socket; //Socket对象public bool m_isFree; //判断是否空闲public int m_index; //在链接缓存池中的索引值}下面的函数是创建socket链接池,这里为了使代码更加清晰,特地把异常处理部分 全部取掉了。public XieGouSocket[] m_socket; //先定义个缓冲池public void CreateSocketPool(){string ip= “127.0.0.1”;string port= 2003;IPAddress serverIp=IPAddress.Parse(ip);int serverPort=Convert.ToInt32(port);IPEndPoint iep=new IPEndPoint(serverIp,serverPort);m_socket = new XieGouSocket[200];for(int i =0; i < 200 ; i ++){m_socket[i] = new XieGouSocket();m_socket[i].m_index = i ;m_socket[i].m_isFree = true;m_socket[i].m_socket =new Socket (AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);m_socket[i].m_socket.SetSocketOption (SocketOptionLevel.Socket,SocketOptionName.SendTimeout,1000);m_socket[i].m_socket.Connect(iep);}}下面的函数是获取当前空闲的socket链接:因为是多线程,所以需要加一个原子操作,定义一个原子变量,以防止多个线程 之间抢占资源问题的发生。private static Mutex m_mutex=new Mutex();public static XieGouSocket GetFreeConnection(){m_mutex.WaitOne(); //先阻塞for(int i =0; i < m_socket.Length ; i ++){if(m_socket[i].m_isFree) //如果找到一个空闲的{m_socket[i].m_isFree = false;m_mutex.ReleaseMutex();//释放资源return m_socket[i];}}//如果没有空闲的链接,要么等待,要么程序再动态创建一个链接。m_mutex.ReleaseMutex();//释放资源return null;} 当数据发送完毕后,程序必须将m_isFree 设置为 False。否则只使用不释放,程序很 快就溢出了。
      如何建立

      java socket 使用方法

      Socket.getPort(); //获取客户端的端口Socket.getInetAddress();//获取客户端的地址信息返回InetAddress对象 InetAddress对象里面都是你要的信息,具体可以查JDK文档
      java socket 使用方法

      android socket有几种方法

      /***第一种:客户端Socket通过构造方法连接服务器***/ //客户端Socket可以通过指定IP地址或域名两种方式来连接服务器端,实际最终都是通过IP地址来连接服务器//新建一个Socket,指定其IP地址及端口号Socket socket = new Socket("192.168.0.7",80);/***Socket 客户端 一些常用设置***///客户端socket在接收数据时,有两种超时:1.连接服务器超时,即连接超时;2.连接服务器成功后,接收服务器数据超时,即接收超时//*设置socket 读取数据流的超时时间socket.setSoTimeout(5000);//发送数据包,默认为false,即客户端发送数据采用Nagle算法;//但是对于实时交互性高的程序,建议其改为true,即关闭Nagle算法,客户端每发送一次数据,无论数据包大小都会将这些数据发送出去socket.setTcpNoDelay(true);//设置客户端socket关闭时,close()方法起作用时延迟1分钟关闭,如果1分钟内尽量将未发送的数据包发送出去socket.setSoLinger(true, 60);//设置输出流的发送缓冲区大小,默认是8KB,即8096字节socket.setSendBufferSize(8096);//设置输入流的接收缓冲区大小,默认是8KB,即8096字节socket.setReceiveBufferSize(8096);//作用:每隔一段时间检查服务器是否处于活动状态,如果服务器端长时间没响应,自动关闭客户端socket//防止服务器端无效时,客户端长时间处于连接状态socket.setKeepAlive(true);/*** Socket客户端向服务器端发送数据 ****///客户端向服务器端发送数据,获取客户端向服务器端输出流OutputStream os = socket.getOutputStream();OutputStreamWriter osw = new OutputStreamWriter(os);BufferedWriter bw = new BufferedWriter(osw);//代表可以立即向服务器端发送单字节数据socket.setOOBInline(true);//数据不经过输出缓冲区,立即发送socket.sendUrgentData(65);//"A"//向服务器端写数据,写入一个缓冲区//注:此处字符串最后必须包含“rnrn”,告诉服务器HTTP头已经结束,可以处理数据,否则会造成下面的读取数据出现阻塞//在write()方法中可以定义规则,与后台匹配来识别相应的功能,例如登录Login()方法,可以写为write("Login|test,123 rnrn"),供后台识别;bw.write("Login|test,123 rnrn");//发送缓冲区中数据,必须有bw.flush();/*** Socket客户端读取服务器端响应数据 ****///socket.isConnected代表是否连接成功过if((socket.isConnected() == true) && (socket.isClosed() == false)){//判断Socket是否处于连接状态//客户端接收服务器端的响应,读取服务器端向客户端的输入流InputStream is = socket.getInputStream();//缓冲区byte[] buffer = new byte[is.available()];//读取缓冲区is.read(buffer);//转换为字符串String responseInfo = new String(buffer);//日志中输出Log.i("TEST", responseInfo);} //关闭网络socket.close();/***第二种:通过connect方法连接服务器***/Socket socket_other = new Socket();//使用默认的连接超时socket_other.connect(new InetSocketAddress("192.168.0.7",80));//连接超时2ssocket_other.connect(new InetSocketAddress("192.168.0.7",80),2000);//关闭socketsocket_other.close();} catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace(); }
      android socket有几种方法

      在同一个计算机上怎么实现socket方法?

      首先,需要弄懂socket的工作机制,无需装什么虚拟机。 大致的思路是这样:一、服务器端,将socket绑定在本地IP的某个端口,如6000;启动监听并开始接受客户端。二、客户端,创建socket以后,连接到本地IP的6000端口,这样就可以了。三、然后,双方收发数据。 注意:给本地服务器发送数据,网络协议并不将数据发送到网卡上,所以这种类型的数据流是不会出现在网络上的。其他方面的特性和远端通信是差不多的。
      你可以在计算机上安装虚拟机,之后在进行调试程序 很好用的
      在同一个计算机上怎么实现socket方法?

      本文由 在线网速测试 整理编辑,转载请注明出处。

          热门文章

          文章分类