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 } }
查看全文
相关阅读:
D3D资源管理
地形有必要做LOD吗?
J2SE IO编程
J2SE 枚举类型 [enum]
Struts2 DefaultAction (默认Action)
J2SE 内部类 [Inner]
J2SE 断言 [Assert]
JavaScript
SCM_CVS_SVN 版本控制器
Struts2 IncludeModules(包含 <include file="login.xml" />)
原文地址:https://www.cnblogs.com/javawebsoa/p/2458155.html
最新文章
多媒体支持
警告,动作表单和模式视图
导航栏,标签栏,工具栏和状态栏
HDU 4082 Hou Yi's secret (几何,求相似三角形个数,暴力枚举,map记录)
ZOJ 3329 One Person Game(概率DP,求期望)
HDU 4285 circuits 第37届ACM/ICPC天津赛区网络赛(插头DP)
FZU 1977 Pandora adventure (插头DP)
HDU 1693 Eat the Trees(插头DP,多条回路)
POJ 2096 Collecting Bugs(概率DP,求期望)
POJ 3744 Scout YYF I (矩阵优化的概率DP)
热门文章
ZOJ 3213 Beautiful Meadow (插头DP 求简单路径)
oracle insert in ibatis3
VS2010太好用了。。完全抛弃VS2005, VS2008。。。。
网络游戏中服务器端与客户端分别处理哪些事情
转DirectX 性能优化
转载c++游戏开发中使用json .
转9 个开始使用 C++11 的理由
LINK2005 error
vector.resize 与 vector.reserve的区别
转载Skinned Mesh原理解析和一个最简单的实现示例 .
Copyright © 2011-2022 走看看