Socket宪法在立法中的作用BeginAccept怎么用

经典的C#通信小例子,学习beginAccept
需要增加的命名空间:
using System.T
using System.N
using System.Net.S
以下是具体实现。
C# code复制代码
namespace TCPServer
public partial class Form1 : Form
&&&&&&&&&&&&&&&
public Form1()
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&
InitializeComponent();
&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
public bool btnstatu =
//开始停止服务按钮状态
&&&&&&&&&&&&&&&
public Thread
myT&&&&&&&&&&&&
//声明一个线程实例
&&&&&&&&&&&&&&&
public Socket
&&&&&&&&&&&&&&&
//声明一个Socket实例
&&&&&&&&&&&&&&&
public Socket
C&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
public IPEndPoint
localEP;&&&&&&&
&&&&&&&&&&&&&&&
public int localP
&&&&&&&&&&&&&&&
public bool m_L
&&&&&&&&&&&&&&&
//用来设置服务端监听的端口号
&&&&&&&&&&&&&&&
public int
setPort&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&
get { return localP }
&&&&&&&&&&&&&&&&&&&&&&&
set { localPort = }
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
//用来往richtextbox框中显示消息
&&&&&&&&&&&&&&&
public void showClientMsg(string msg)
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&
showClientMsg(msg+"\r\n");
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
//监听函数
&&&&&&&&&&&&&&&
public void Listen()
&&&&&&&&&&&&&&&
//设置端口
&&&&&&&&&&&&&&&&&&&&&&&
setPort=int.Parse(serverport.Text.Trim());
&&&&&&&&&&&&&&&&&&&&&&&
//初始化SOCKET实例
&&&&&&&&&&&&&&&&&&&&&&&
newsock = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.Tcp);
&&&&&&&&&&&&&&&&&&&&&&&
//初始化终结点实例
&&&&&&&&&&&&&&&&&&&&&&&
localEP=new IPEndPoint(IPAddress.Any,setPort);
&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
newsock.Bind(localEP);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
newsock.Listen(10);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//用于设置按钮状态
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_Listening =
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//开始接受连接,异步。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
newsock.BeginAccept(new AsyncCallback(OnConnectRequest),
&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&
catch (Exception ex)
&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
showClientMsg(ex.Message);
&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
//当有客户端连接时的处理
&&&&&&&&&&&&&&&
public void OnConnectRequest(IAsyncResult ar)
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&
//初始化一个SOCKET,用于其它客户端的连接
&&&&&&&&&&&&&&&&&&&&&&&
Socket server1 = (Socket)ar.AsyncS
&&&&&&&&&&&&&&&&&&&&&&&
Client = server1.EndAccept(ar);
&&&&&&&&&&&&&&&&&&&&&&&
//将要发送给连接上来的客户端的提示字符串
&&&&&&&&&&&&&&&&&&&&&&&
string strDateLine = "Welcome here";
&&&&&&&&&&&&&&&&&&&&&&&
Byte[] byteDateLine =
System.Text.Encoding.ASCII.GetBytes(strDateLine);
&&&&&&&&&&&&&&&&&&&&&&&
//将提示信息发送给客户端
&&&&&&&&&&&&&&&&&&&&&&&
Client.Send(byteDateLine, byteDateLine.Length, 0);
&&&&&&&&&&&&&&&&&&&&&&&
//等待新的客户端连接
&&&&&&&&&&&&&&&&&&&&&&&
server1.BeginAccept(new AsyncCallback(OnConnectRequest),
&&&&&&&&&&&&&&&&&&&&&&&
while (true)
&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
int recv = Client.Receive(byteDateLine);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
string stringdata = Encoding.ASCII.GetString(byteDateLine, 0,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
DateTimeOffset now = DateTimeOffset.N
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//获取客户端的IP和端口
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
string ip = Client.RemoteEndPoint.ToString();
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
if (stringdata == "STOP")
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//当客户端终止连接时
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
showinfo.AppendText(ip+"已从服务器断开");
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//显示客户端发送过来的信息
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
showinfo.AppendText(ip +
now.ToString("G") +
" + stringdata +
"\r\n");&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
&&&&&&&&&&&
//开始停止服务按钮
&&&&&&&&&&&&&&&
private void startService_Click(object sender, EventArgs e)
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&
//新建一个委托线程
&&&&&&&&&&&&&&&&&&&&&&&
ThreadStart myThreadDelegate = new ThreadStart(Listen);
&&&&&&&&&&&&&&&&&&&&&&&
//实例化新线程
&&&&&&&&&&&&&&&&&&&&&&&
myThread = new Thread(myThreadDelegate);
&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&
if (btnstatu)
&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
myThread.Start();
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
statuBar.Text = "服务已启动,等待客户端连接";
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
btnstatu =
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
startService.Text = "停止服务";
&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//停止服务(功能还有问题,无法停止)
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_Listening =
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
newsock.Close();
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
myThread.Abort();
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
showClientMsg("服务器停止服务");
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
btnstatu =
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
startService.Text = "开始服务";
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
statuBar.Text = "服务已停止";
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
m_Listening =
&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
//窗口关闭时中止线程。
&&&&&&&&&&&&&&&
private void Form1_FormClosing(object sender, FormClosingEventArgs
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&
if (myThread != null)
&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
myThread.Abort();
&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
C# code复制代码
using System.Collections.G
using System.D
using System.D
using System.L
using System.T
using System.Windows.F
using System.N
using System.Net.S
using System.T
namespace TCPClient
public partial class Form1 : Form
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
public bool C
&&&&&&&&&&&&&&&
public Thread myT
&&&&&&&&&&&&&&&
public delegate void MyInvoke(string str);
&&&&&&&&&&&&&&&
public Form1()
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&
InitializeComponent();
&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
public void Connect()
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&
byte[] data = new byte[1024];
&&&&&&&&&&&&&&&&&&&&&&&
newclient = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
&&&&&&&&&&&&&&&&&&&&&&&
string ipadd = serverIP.Text.Trim();
&&&&&&&&&&&&&&&&&&&&&&&
int port = Convert.ToInt32(serverPort.Text.Trim());
&&&&&&&&&&&&&&&&&&&&&&&
IPEndPoint ie = new IPEndPoint(IPAddress.Parse(ipadd), port);
&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
newclient.Connect(ie);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
connect.Enabled =
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Connected =
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&
catch(SocketException e)
&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
MessageBox.Show("连接服务器失败&&&
"+e.Message);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&
ThreadStart myThreaddelegate = new ThreadStart(ReceiveMsg);
&&&&&&&&&&&&&&&&&&&&&&&
myThread = new Thread(myThreaddelegate);
&&&&&&&&&&&&&&&&&&&&&&&
myThread.Start();
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
public void ReceiveMsg()
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&
while (true)
&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
byte[] data = new byte[1024];
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
int recv = newclient.Receive(data);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
string stringdata = Encoding.UTF8.GetString(data, 0, recv);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
showMsg(stringdata + "\r\n");
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//receiveMsg.AppendText(stringdata + "\r\n");
&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
public void showMsg(string msg)
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&
//在线程里以安全方式调用控件
&&&&&&&&&&&&&&&&&&&&&&&
if (receiveMsg.InvokeRequired)
&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
MyInvoke _myinvoke = new MyInvoke(showMsg);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
receiveMsg.Invoke(_myinvoke, new object[] { msg });
&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
receiveMsg.AppendText(msg);
&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
private void SendMsg_Click(object sender, EventArgs e)
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&
int m_length = mymessage.Text.L
&&&&&&&&&&&&&&&&&&&&&&&
byte[] data=new byte[m_length];
&&&&&&&&&&&&&&&&&&&&&&&
data = Encoding.UTF8.GetBytes(mymessage.Text);
&&&&&&&&&&&&&&&&&&&&&&&
int i = newclient.Send(data);
&&&&&&&&&&&&&&&&&&&&&&&
showMsg("我说:" + mymessage.Text + "\r\n");
&&&&&&&&&&&&&&&&&&&&&&&
//receiveMsg.AppendText("我说:"+mymessage.Text + "\r\n");
&&&&&&&&&&&&&&&&&&&&&&&
mymessage.Text = "";
&&&&&&&&&&&&&&&&&&&&&&&
//newclient.Shutdown(SocketShutdown.Both);
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
private void connect_Click(object sender, EventArgs e)
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&
Connect();
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。2017年2月 总版技术专家分月排行榜第三
2017年5月 .NET技术大版内专家分月排行榜第一2017年4月 .NET技术大版内专家分月排行榜第一2017年3月 .NET技术大版内专家分月排行榜第一2017年2月 .NET技术大版内专家分月排行榜第一2016年10月 .NET技术大版内专家分月排行榜第一2016年8月 .NET技术大版内专家分月排行榜第一2016年7月 .NET技术大版内专家分月排行榜第一
2017年2月 总版技术专家分月排行榜第三
2017年5月 .NET技术大版内专家分月排行榜第一2017年4月 .NET技术大版内专家分月排行榜第一2017年3月 .NET技术大版内专家分月排行榜第一2017年2月 .NET技术大版内专家分月排行榜第一2016年10月 .NET技术大版内专家分月排行榜第一2016年8月 .NET技术大版内专家分月排行榜第一2016年7月 .NET技术大版内专家分月排行榜第一
2017年2月 总版技术专家分月排行榜第三
2017年5月 .NET技术大版内专家分月排行榜第一2017年4月 .NET技术大版内专家分月排行榜第一2017年3月 .NET技术大版内专家分月排行榜第一2017年2月 .NET技术大版内专家分月排行榜第一2016年10月 .NET技术大版内专家分月排行榜第一2016年8月 .NET技术大版内专家分月排行榜第一2016年7月 .NET技术大版内专家分月排行榜第一
2015年3月 总版技术专家分月排行榜第二2014年12月 总版技术专家分月排行榜第二2014年9月 总版技术专家分月排行榜第二
2015年3月 .NET技术大版内专家分月排行榜第一2015年2月 .NET技术大版内专家分月排行榜第一2015年1月 .NET技术大版内专家分月排行榜第一2014年12月 .NET技术大版内专家分月排行榜第一2014年11月 .NET技术大版内专家分月排行榜第一
本帖子已过去太久远了,不再提供回复功能。Socket.BeginAccept 方法 (AsyncCallback, Object) (System.Net.Sockets)
BeginAccept 方法 (AsyncCallback, Object)
本文档已存档,并且将不进行维护。
Socket.BeginAccept 方法 (AsyncCallback, Object)
Visual Studio 2008
更新:2007 年 11 月
开始一个异步操作来接受一个传入的连接尝试。
命名空间:
System(在 System.dll 中)
[HostProtectionAttribute(SecurityAction.LinkDemand, ExternalThreading = true)]
public IAsyncResult BeginAccept(
AsyncCallback callback,
Object state
/** @attribute HostProtectionAttribute(SecurityAction.LinkDemand, ExternalThreading = true) */
public IAsyncResult BeginAccept(
AsyncCallback callback,
Object state
public function BeginAccept(
callback : AsyncCallback,
state : Object
) : IAsyncResult
callback类型:
state类型:
一个对象,它包含此请求的状态信息。
一个 ,它引用异步
对象已关闭。
此方法需要 Windows NT。
正在接受的套接字不会侦听连接。在调用
之前必须调用
已接受的套接字是绑定的。
receiveSize 小于 0。
试图访问套接字时发生错误。有关更多信息,请参见备注部分。
说明:应用到此类型或成员的
属性 (Attribute) 具有以下
属性 (Property) 值:ExternalThreading。 不影响桌面应用程序(这些应用程序通常通过双击图标、键入命令或在浏览器中输入 URL 来启动)。有关更多信息,请参见
面向连接的协议可以使用
方法来异步处理传入的连接尝试。以异步方式接受连接将使您能够在单独的执行线程中发送和接收数据。在调用
方法之前,必须调用
方法来侦听传入的连接请求,并将侦听到的请求放入队列中。
必须创建实现
委托的回调方法,并将其名称传递给
方法。若要实现这一点,至少必须通过 state 参数将实施侦听的
对象传递给 。如果您的回调需要更多信息,则可以创建一个小型类来保存
和其他必需的信息。通过 state 参数将此类的一个实例传递给
回调方法应调用
方法。应用程序调用
时,系统会使用单独的线程执行指定的回调方法,并在
上一直处于阻止状态,直到检索到挂起的连接。 将会返回新的
对象,供您用来向远程主机发送数据和从远程主机接收数据。不能使用返回的这个
接受连接队列中的任何附加连接。如果想要在调用
方法后使原始线程阻止,请使用 。当需要原始线程继续执行时,请在回调方法中调用
的 Set 方法。有关编写回调方法的其他信息,请参见 。
说明:可以调用返回的
方法来标识远程主机的网络地址和端口号。说明:如果收到 ,请使用
属性获取特定的错误代码。获取此代码后,可以参考 MSDN 中的 Windows Sockets 第 2 版 API 错误代码文档,获取有关此错误的详细说明。说明:当应用程序中启用了网络跟踪时,此成员将输出跟踪信息。有关更多信息,请参见。说明:执行上下文(安全上下文、模拟用户及调用上下文)会被缓存,以用于
异步方法。在首次使用一个特定上下文(特定
异步方法、特定
实例及特定回调)后,该上下文的后续使用将得到性能改善。
下面的代码示例尝试异步接收传入连接。
IPHostEntry lipa = Dns.Resolve("");
IPEndPoint lep = new IPEndPoint(lipa.AddressList[0], 11000);
Socket s = new Socket(lep.Address.AddressFamily,
SocketType.Stream,
ProtocolType.Tcp);
s.Bind(lep);
s.Listen(1000);
while(true){
allDone.Reset();
Console.WriteLine("Waiting for a connection...");
s.BeginAccept(new AsyncCallback(Async_Send_Receive.Listen_Callback), s);
allDone.WaitOne();
catch (Exception e){
Console.WriteLine(e.ToString());
IPHostEntry lipa = Dns.Resolve("");
IPEndPoint lep = new IPEndPoint(lipa.get_AddressList()[0], 11000);
Socket s = new Socket(lep.get_Address().get_AddressFamily(),
SocketType.Stream, ProtocolType.Tcp);
s.Bind(lep);
s.Listen(1000);
while (true) {
allDone.Reset();
Console.WriteLine("Waiting for a connection...");
s.BeginAccept(new AsyncCallback(Async_Send_Receive.
Listen_Callback), s);
allDone.WaitOne();
catch (System.Exception e) {
Console.WriteLine(e.ToString());
Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile for Smartphone, Windows Mobile for Pocket PC
.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见。 受以下版本支持:3.5、3.0、2.0、1.1、1.0受以下版本支持:3.5、2.0、1.02013年4月 总版技术专家分月排行榜第一2013年3月 总版技术专家分月排行榜第一
2013年4月 .NET技术大版内专家分月排行榜第一2013年3月 .NET技术大版内专家分月排行榜第一
本帖子已过去太久远了,不再提供回复功能。

我要回帖

更多关于 excel中 的用法 的文章

 

随机推荐