问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何建立socket连接?

发布网友 发布时间:2天前

我来回答

1个回答

热心网友 时间:2024-10-19 04:24

一般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 {
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 {
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。否则只使用不释放,程序很 快就溢出了。
如何建立socket连接?

一般socket链接有以下两种方式:长(常)链接和短链接。长链接:当数据发送完成后socket链接不断开。一直保留到异常或者是程序退出为止 ,这种方式的好处是不用每次去发起连接断开,在速度上可以比短连接要快一些,但是相 对来说对服务器的资源压力也要大些。长链接用的范围很广,比如游戏系统,qq等等,...

如何建立socket连接

建立套接字 socket()打开一个网络通讯端口,如果成功的话,就像open()一样返回一个文件描述符,应用程序可以像读写文件一样用read/write在网络上收发数据,如果socket()调用出错则返回-1。在 INET BSD 套接字上绑定(bind)地址 为了监听传入的 Internet 连接请求,每个服务器都需要建立一个 INET BSD...

怎么建立Socket长连接

实现长连接的方法 1、客户端自动退出开读取的动作。前面说了,就算服务端调用了flush方法进行输出刷新,客户端也不一定能退出read的动作,所以还是会阻塞。所以,退出动作必须有客户端程序自己完成,我们可以在服务端没发送完一段消息并且刷新前就进行一个写入结束符号的标志,客户端解析到结束符号时,变可...

socket的连接过程

为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。(3)连接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发...

如何创建一个tls的socket进行连接

:java socket建立连接的过程如下: socket 1、 首先调用Socket类的构造函数,以服务器的指定的IP地址或指定的主机名和指定的端口号为参数,创建一个Socket流,在创建Socket流的过程中包含了向服务器请求建立通讯连接的过程实现。

到底什么是Socket?

Socket 是如何连接的 Socket创建完成后,最终还是为数据收发服务的。但是,在数据收发之前,还需要进行一步“连接”(术语就是 connect),建立连接有一整套过程。实际上这个“连接”是应用程序通过 TCP/IP 协议标准从一个主机通过网络介质传输到另一个主机的过程。Socket刚刚创建完成后,还没有数据,也不...

java中如何创建socket连接的过程?

1、在打开的ie浏览器窗口右上方点击齿轮图标,选择“Internet选项”,如下图所示:2、在打开的Internet选项窗口中,切换到安全栏,在安全选卡中点击“自定义级别”,如下图所示:3、在“安全设置-Internet 区域”界面找到“Java 小程序脚本”、“活动脚本”,并将这两个选项都选择为“禁用”,然后点击...

python怎么建立socket服务端

#创建socket连接 self.client = socket(AF_INET, SOCK_STREAM) self.client.connect(self.ADDR) #起一个线程,监听接收的信息 self.trecv = threading.Thread(target=self.recvmsg) self.trecv.start() def sendmsg(self): #循环发送聊天消息,如果socket连接存在则一直循环,发送quit时关闭链接 while self.client...

如何android native 创建socket server

建立Socket连接 1) Socket 实现了TCP/IP协议,可以连接到网络上的上脑,并收发数据 2) ServerSocket 用于服务端,可以监听服务端口,等待客户端连接,连接后可以生成用于传输数据的Socket 3) 创建服务端 ServerSocket serverSocket = new ServerSocket(9999);Socket socket = serverSocket.accept(); /...

SocketTool怎么用/如何建立Socket服务端/客户端

失去了跟主机的连接】,表示测试连接已经断开。再来创建TCP的客户端,点击【TCP Client】再点击【创建】。会弹出【创建socket客户端】窗口,输入对方的ip和对方的端口,点击确认。14 tcp的客户端已经建立好,如果对方的端口监听正常的话,点击【连接】就可以连接到对方的端口和对方进行测试通信了。

如何建立websocket连接 socket建立tcp连接的过程 websocket无法建立连接 websocket连接正在建立 websocket建立连接过程 websocket建立连接要很久 socket建立连接的步骤 创建socket连接 创建一个简单的socket连接
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
从10万炒到230万,如何快速找到热点板块? 如何知道什么板块热门 ...抽取灰色的结晶 任务没做 现在任务变成灰色了 咋整 球知道,dnf主线任务变灰色是不是就不能完成了为什么我满级的去女神殿... wow和任务差多少级任务就会变成灰色的 老人手机什么牌子好?10大老人手机品牌排行榜 平价又好用的洁面慕斯有哪些推荐? 有什么平价又实用的控油洗面奶推荐? 陕西跆拳道为何如此混乱 哪个体育学院有跆拳道专业 在单位玩网页游戏怎么连接socket? 伤囗长度六厘米、肌肉裂到骨头、屈肌和滑膜开裂、砍下一块小骨片... 什么是kd包装的kd是什么意思 掌贝微pos在移动支付和消费金融全球论坛扮演的角色对整个大会有什么样的... ...报告单写的左手食指末节指骨头部小骨片撕脱,软组织肿胀,医生_百度... 掌贝微pos是否具备闪付功能? ...可是没有资金,有能给我投资的联系我,咱们和伙共同治富可以吗?我_百... 掌贝微pos有记录交易记录的功能吗? 掌贝微pos的应用都有哪些啊? 掌贝微POS可以建立消费数据库吗? 全民突击怎么升级 全民突击快速升级攻略 全民突击辅助加速器使用图文教程 全民突击不掉血辅助app安卓游戏高速下载 全民突击辅助怎么用 全民突击辅助提速工具使用图文教程介绍_全民突击辅助提速工具使用图文教 ... 把死人的尸体装在麻袋里往别人家的院子里丢会怎么样? 山东省青岛第十六中学师资力量 山东省青岛第十六中学学校荣誉 青岛第十六中学怎么样? 有什么降压药 什么是轻一轻二 ...养羊和养牛哪个好?我家是养牛的,但是我又没有资本开牛场,怎么... 我不想打工了,想回家养牛,可是现在没钱有没经验,怎么搞呢? 有线电视如何一分二 一个电视可以连接几个有线电视 封神榜国际版67级甲士的哼哈二将任务怎么做 石家庄到西柏坡自驾游攻略,正定旅游攻略自驾游 我想十二台电视同用一条入户的电视线看电视,如何实现?用什么扩大器或分... 北京骑自行车到天津要注意什么?我就挑战长途自行车,这次行程坐高铁算作... 用洗衣机洗衣服衣服上的洗衣粉没洗干净怎么办 ...高速骑行,比如说40公里左右的时速, 能不能快速制动? ...什么.?自行车都是普通的自行车,.对这个有什么要求么.? 买个柴油皮卡车代步怎么样?我是上班族,但是喜欢皮卡的狂野,又不想太... 童年的作者,内容,人物形象3个人物,共200字,追加悬赏 电脑连接上cmcc_EDU后,打开登陆页面输入手机和密码后,就是登不上去,直... 电脑连上cmccedu 却打开的是锐捷登录界面 戴尔V3450568的配置参数 世界近代史上的五件大事 runningman110410结束后预告是什么节目? 戴维·尤里奇戴维·尤里奇简介