c# 创建socket连接辅助类

using AD.SocketForm.Model;
using NLog;
using System;
using System.Net;
using System.Net.Sockets;

namespace AD.SocketForm.Service
{
    public class SocketService
    {
        private Logger _logger = LogManager.GetCurrentClassLogger();

        /// <summary>
        /// 创建socket
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public Socket Create(HubModel model)
        {
            try
            {
                // 将IP地址字符串转换为IPAddress对象
                IPAddress ip = IPAddress.Parse(model.IP);
                // 创建终结点EndPoint
                IPEndPoint endPoint = new IPEndPoint(ip, model.Port);
                // 创建Socket并连接到服务器
                Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                // 连接到服务器
                socket.Connect(endPoint);

                return socket;
            }
            catch (System.Exception ex)
            {
                _logger.Error(string.Format("获取socket异常,message:{0},stacktrace:{1}", ex.Message, ex.StackTrace));
            }
            return null;
        }

        /// <summary>
        /// 关闭socket
        /// </summary>
        /// <param name="socket"></param>
        public void Close(Socket socket)
        {
            if (socket != null)
            {
                socket.Close();
                socket = null;
            }
        }

        /// <summary>
        /// 判断Socket是否已连接
        /// </summary>
        /// <param name="socket"></param>
        /// <returns></returns>
        public bool IsConnected(Socket socket)
        {
            if (socket == null || socket.Connected == false)
            {
                return false;
            }

            bool blockingState = socket.Blocking;
            try
            {
                byte[] tmp = new byte[1];
                socket.Blocking = false;
                socket.Send(tmp, 0, 0);
                return true;
            }
            catch (SocketException e)
            {
                // 产生 10035 == WSAEWOULDBLOCK 错误,说明被阻止了,但是还是连接的
                if (e.NativeErrorCode.Equals(10035))
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch (Exception ex)
            {
                _logger.Error(string.Format("检查Socket是否可连接时异常,message:{0},stacktrace:{1}", ex.Message, ex.StackTrace));
                return false;
            }
            finally
            {
                socket.Blocking = blockingState;    // 恢复状态
            }
        }
    }
}

原文地址:https://www.cnblogs.com/subendong/p/11822923.html

时间: 2024-10-29 10:44:55

c# 创建socket连接辅助类的相关文章

c# 创建socket连接辅助类-可指定超时时间

using AD.SocketForm.Model; using NLog; using System; using System.Net.Sockets; using System.Threading; namespace AD.SocketForm.Service { /// <summary> /// Socket连接类-可指定超时时间 /// 参考网址://www.cnblogs.com/weidagang2046/archive/2009/02/07/1385977.html ///

Http和Socket连接区别

1.TCP连接 要想明白Socket连接,先要明白TCP连接.手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接.TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上. 建立起一个TCP连接需要经过“三次握手”: 第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认: 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k

PHP的socket连接到服务端模版

在整理新框架的时候,发现对于一些缓存数据,需要对外的接口访问,而比较方便的是php的接口,所以临时研究了下php如何连接java服务端. 先贴上代码: <?php require_once 'CRC16.php'; /*----------------------------- | 向服务器发送数据包 ------------------------------*/ classServer{ //发送数据包 publicstaticfunction sendPacket($packet, $ho

Android 通过局域网udp广播自动建立socket连接

Android开发中经常会用到socket通讯.由于项目需要,最近研究了一下这方面的知识. 需求是想通过wifi实现android移动设备和android平台的电视之间的文件传输与控制. 毫无疑问这中间一定需要用到socket来进行通信.今天就两台设备的握手连接方式分享一下吧,该方法只是本人个人想法的实现,仅供参考,如有雷同,不胜荣幸. 要想使用socket进行通讯,就必须知道服务端的IP地址,我使用的是通过udp局网广播来实现局网内服务端的搜寻建立连接.以下是代码实现. 首先是客户端: pub

PHP创建socket服务

PHP可以创建socket服务. 先熟悉几个php网络方面的函数,操作手册地址  http://php.net/manual/zh/ref.sockets.php 简单介绍下socket,它表示套接字,用于TCP/IP协议.稍微了解网络通讯的知道,建立TCP/IP需要两方各自的网络地址IP+端口port,这个IP+port就是socket,通信需要一对这么socket.比如常见的浏览器请求服务器,浏览器端的IP+随机找一个空闲的端口号,连接对方服务器的IP+服务端口(通常http服务是80).

UrlConnection连接和Socket连接的区别

关于UrlConnection连接和Socket连接的区别,只知道其中的原理如下:抽象一点的说,Socket只是一个供上层调用的抽象接口,隐躲了传输层协议的细节.urlconnection 基于Http协议,Http协议是应用层协议,对传输层Tcp协议进行了封装,是无状态协议,不需要你往考虑线程.同步.状态治理等,内部是通过socket进行连接和收发数据的,不过一般在数据传输完成之后需要封闭socket连接.直接使用Socket进行网络通讯得考虑线程治理.客户状态监控等,但是不用发送头信息等,更

Cocos网络篇[3.2](3) ——Socket连接(1)

[唠叨] 在客户端游戏开发中,使用HTTP进行网络通信的比较少,一般使用的都是Socket进行通信.而HTTP一般用于网页或者网页游戏. 使用第三方Socket通信库:ODSocket. [参考] http://blog.csdn.net/sight_/article/details/8138802 (Socket详解) http://blog.csdn.net/hguisu/article/details/7444092 (Socket编程原理) [源码下载] ODSocket库源码:http

创建Socket

java在包java.net中提供了两个类Socket和ServerSocket,分别用来表示双向连接的客户端和服务端.这是两个封装得非常好的类,使用很方便.其构造方法如下: Socket(InetAddress address, int port); Socket(InetAddress address, int port, boolean stream); Socket(String host, int prot); Socket(String host, int prot, boolean

Android Socket连接

注意点:注册访问的网络权限:android中UI线程不能有访问网络的操作,否则会报android.os.NetworkOnMainThreadException的异常 <uses-permission android:name="android.permission.INTERNET"/> 实例一 客户端 Java: package com.android.xiong.simplesocket; import java.io.BufferedReader; import j