zoukankan
html css js c++ java
自己动手,丰衣足食 之Socket开发
话说“主机已经强制性关闭一个链接”这个问题一直拖延了很久,现在解决了,贴出来希望能购有所参考
using System; using System.Collections; using System.Collections.Specialized; using System.Text; using System.Threading; using System.Net.Sockets; using System.Net; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; using System.IO; using System.Data; using System.Windows.Forms; using System.Configuration; using Microsoft.Win32; using System.Diagnostics; using System.Timers; namespace WSGPSGateway { public partial class TcpServer : Form { public TcpServer() { InitializeComponent(); } #region 自定义字段 public static ManualResetEvent allDone = new ManualResetEvent(false); /// <summary> /// 监听控件开启状态 /// </summary> private bool State = true; /// <summary> /// 声明一个线程实例 /// </summary> private Thread mythread; /// <summary> /// 服务器端Ip /// </summary> private int _port = Convert.ToInt32(ConfigurationManager.AppSettings["Port"]); /// <summary> /// 保存客户端所有回话的哈希表 /// </summary> private Hashtable _transmit_tb = new Hashtable(); /// <summary> /// 用于接受消息的线程 /// </summary> private Thread _receviccethread = null; public struct TCPParameter { public string Package; public string IpAddress; } #endregion #region 监听代码块 //窗体运行 private void TcpServer_Load(object sender, EventArgs e) { this.WindowState = FormWindowState.Minimized; this.Opacity = 0; // 窗体透明度 Form.CheckForIllegalCrossThreadCalls = false; InitializeComponent(); mythread = new Thread(Listen); mythread.Start(); System.Timers.Timer atimer = new System.Timers.Timer(); atimer.Elapsed += new System.Timers.ElapsedEventHandler(TimeEvent); atimer.Interval = 1000; atimer.Enabled = true; GC.KeepAlive(atimer); } private object threadlock = new object(); //启动监听 private void BtnStart_Click(object sender, EventArgs e) { //多线程 } //启动监听,轮询监听客户机请求并将客户端套接字存入转发表 private void Listen() { try { IPAddress _ip = IPAddress.Any; Socket newsoc = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); newsoc.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); IPEndPoint locaEp = new IPEndPoint(IPAddress.Any, _port);//建立连接 newsoc.Bind(locaEp); newsoc.Listen(100); allDone.Reset(); newsoc.BeginAccept(new AsyncCallback(onCall), newsoc);//继续接受其他客户端的连接 allDone.WaitOne(); } catch (Exception ex) { // } } //监听回调 private void onCall(IAsyncResult ar) { allDone.Set(); Socket serverSoc = (Socket)ar.AsyncState; Socket clent = serverSoc.EndAccept(ar); try { if (serverSoc != null) { byte[] comes = new byte[1024]; EndPoint enp = clent.RemoteEndPoint; serverSoc.BeginAccept(new AsyncCallback(onCall), serverSoc); while (true) { int re = clent.Receive(comes, comes.Length, 0); clent.Send(Encoding.ASCII.GetBytes("8")); TCPParameter parm = new TCPParameter(); parm.Package = Encoding.UTF8.GetString(comes, 0, re).ToString().Trim(); parm.IpAddress = clent.RemoteEndPoint.ToString(); if (parm.Package.Length != 0) { Receive(parm.Package, parm.IpAddress); } } } } catch (SocketException ex) { // } } //处理解析数据 private void Receive(string msg, string ip) { // } #endregion #region 关闭与退出 //窗体关闭 private void TcpServer_FormClosing(object sender, FormClosingEventArgs e) { if (mythread != null) { mythread.Interrupt(); mythread.Abort(); GC.Collect(); } } #endregion } }
查看全文
相关阅读:
[置顶] cocos2d-x 3.0游戏开发xcode5帅印博客教学 003.[HoldTail]游戏世界以及背景画面
flex调用webservice中的datatable结果写入datagrid
linux shell编程指南第十一章------------合并与分割2
Java GUI使用exe4j打包exe文件
最小生成树kruskal算法
JQuery Datatable Ajax请求两次问题的解决
其实我还好
EFM32在使用IAR开发环境配置ICf文件以及指定程序存储地址空间
hdu1151Air Raid
UIWebview打开.txt文件中文乱码解决
原文地址:https://www.cnblogs.com/javawebsoa/p/2458155.html
最新文章
HDU 2126 Buy the souvenirs
HDU 3466 Proud Merchants
UVALive 5583 Dividing coins
UVA 624 CD
POJ 3624 Charm Bracelet
HDU 1381 Crazy Search
HDU 1329 Hanoi Tower Troubles Again!
TOJ 2233 WTommy's Trouble
POJ 1155 TELE
mysql实现full join
热门文章
mysql中 union是什么鬼
mysql建表测试
mysql left join 几个意思
(高级篇)php结合redis实现高并发下的抢购、秒杀功能
数据库服务器---Tps
数据库服务器---Qps
liunx
php常用面试题
值得深思的十个面试问题
IE 下使用firebug
Copyright © 2011-2022 走看看