1,首先添加两个windows窗体项目,一个作为服务端server,一个作为客户端Client
  2,然后添加服务端代码,添加命名空间,界面上添加TextBox控件
  using System.Net;
  using System.Net.Sockets;
  3,FormLoad方法添加代码
  private void Form1_Load(object sender, EventArgs e)
  {
  IPEndPoint epServer = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 7878);//IP地址和端口号
  Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//定义socket
  socket.Bind(epServer);//绑定
  socket.Listen(10);//监听
  socket.BeginAccept(new AsyncCallback(RecVing), socket);//异步接收,回调方法为RecVing
  }
  4,添加回调方法代码
  private void RecVing(IAsyncResult rec_socket)
  {
  string cmdstr = "";
  Socket sc = (Socket)rec_socket.AsyncState;
  Socket socket = sc.EndAccept(rec_socket);
  byte[] bytes = new byte[1024];
  int i = socket.Receive(bytes);
  cmdstr = Encoding.UTF8.GetString(bytes, 0, i);
  showstrs(cmdstr);
  sc.BeginAccept(new AsyncCallback(RecVing), sc);
  }
  5,添加showstrs方法,
  定义委托private delegate void shixudong_invoke(string invokefun);
  private void showstrs(string recv_strs)
  {
  if (recv_strs.Length != 0)
  {
  if (this.InvokeRequired)
  {
  shixudong_invoke invoke = new shixudong_invoke(showstrs);
  this.Invoke(invoke, (object)recv_strs);
  }
  else
  {
  textBox1.Text = recv_strs;
  }
  }
  }
  6,到此为止,服务端已经添加完毕
  7,客户端代码,首先跟服务端一样,添加命名空间,在界面上添加button事件
  private void button1_Click(object sender, EventArgs e)
  {
  IPEndPoint IPEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 7878);//IP,端口号
  Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  socket.BeginConnect(IPEndPoint, new AsyncCallback(Sending), socket);//回调方法Sending
  }
  8,添加回调方法,代码如下
  private void Sending(IAsyncResult rec_socket)
  {
  Socket socket = (Socket)rec_socket.AsyncState;
  try托福答案
  {
  if (socket.Connected)
  {
  byte[] msgBuff = Encoding.UTF8.GetBytes(textBox1.Text);
  socket.Send(msgBuff);
  //socket.Accept();
  }
  else
  {
  Console.WriteLine("Error!", "Error!");
  }
  }
  catch
  {
  Console.WriteLine("Error!", "Error!");
  }
  }
  9,到此为止,客户端代码已经完成,调试的时候先启动服务端,然后启动客户端

.net平台下socket异步通讯的更多相关文章

  1. .net平台下socket异步通讯(代码实例)

    你应该知道的.net平台下socket异步通讯(代码实例) 1,首先添加两个windows窗体项目,一个作为服务端server,一个作为客户端Client 2,然后添加服务端代码,添加命名空间,界面上 ...

  2. 你应该知道的.net平台下socket异步通讯(代码实例)

    1,首先添加两个windows窗体项目,一个作为服务端server,一个作为客户端Client 2,然后添加服务端代码,添加命名空间,界面上添加TextBox控件 using System.Net; ...

  3. C#上位机之—WinForm实现Socket异步通讯示例

    工作中常用到的一些知识点,总是用完就忘,第一次尝试用博客记录下来,以备后用: Socket通讯,Socket(套接字)是基于TCP/IP通讯方式的封装好的类,调用时需要添加下面的服务引用: using ...

  4. c++Socket 异步通讯

    在网络通讯中,由于网络拥挤或一次发送的数据量过大等原因,经常会发生交换的数据在短时间内不能传送完,收发数据的函数因此不能返回,这种现象叫做阻塞. Winsock对有可能阻塞的函数提供了两种处理方式:阻 ...

  5. Socket异步通讯

    1.可以通过多线程来解决(一会补上) 2.Socket在tcp/udp两种通信协议下的异步通信: 基于TCP的异步通信: BeginAccept方法和endeaccept方法 包含在System.Ne ...

  6. C# socket异步通讯

    Server: using System; using System.Net; using System.Net.Sockets; using System.Text; namespace TCP_S ...

  7. .net 平台下, Socket通讯协议中间件设计思路(附源码)

    .net 平台下,实现通讯处理有很多方法(见下表),各有利弊: 序号 实现方式 特点 1 WCF 优点:封装好,方便.缺点:难学,不跨平台 2 RocketMQ,SuperSocket等中间件 优点: ...

  8. .net平台下C#socket通信(中)

    上篇.net平台下C#socket通信(上)介绍了socket通信的基本原理及最基本的通信方式.本文在此基础上就socket通信时经常遇到的问题做一个简单总结,都是项目中的一些小问题,拿来此处便于下次 ...

  9. .net平台下C#socket通信(转)

    上篇.net平台下C#socket通信(上)介绍了socket通信的基本原理及最基本的通信方式.本文在此基础上就socket通信时经常遇到的问题做一个简单总结,都是项目中的一些小问题,拿来此处便于下次 ...

随机推荐

  1. HUD 2089

    不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  2. Android图形系统之Surface、SurfaceView、SurfaceHolder及SurfaceHolder.Callback开发实例

    原文:Android图形系统之Surface.SurfaceView.SurfaceHolder及SurfaceHolder.Callback之间的联系 Surface是原始图像缓冲区(raw buf ...

  3. 1 weekend110的hdfs源码跟踪之打开输入流 + hdfs源码跟踪之打开输入流总结

    3种形式的元数据,fsimage是在磁盘上,meta.data是在内存上, 我们继续,前面呢,断点是打在这一行代码处, FileSystem fs = FileSystem.get(conf); we ...

  4. Mockito测试

    Mockito 一 mockito基本概念 Mock测试是单元测试的重要方法之一,而Mockito作为一个流行的Mock框架,简单易学,且有非常简洁的API,测试代码的可读性很高. Mock测试就是在 ...

  5. 关于编译Lambda时报告返回的为void的错误

    这个错误的信息是这样的: a lambda that has been specified to have a void return type cannot return a value 报告错误的 ...

  6. Quartz.NET simple_demo

    Quartz.NET是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等. Quartz.NET允许开发人员根据时间间隔(或天)来调度作业.它实现了作业和 ...

  7. 三分钟学会缓存工具DiskLruCache

    DiskLruCache是一个十分好用的android缓存工具,我们可以从GitHub上下载其源码:https://github.com/JakeWharton/DiskLruCache DiskLr ...

  8. VC++ 响应回车键的2种方法

    众所周知,VC++响应回车键经常用的方法是利用 BOOL PreTranslateMessage(MSG* pMsg) 截取回车键消息,如: if (pMsg->message == WM_KE ...

  9. git提交时的冲突处理

    转自http://www.cnblogs.com/mengdd/p/3585038.html 当两条分支对同一个文件的同一个文本块进行了不同的修改,并试图合并时,Git不能自动合并的,称之为冲突(co ...

  10. majikan