.NetFrameWork为Socket通讯提供了System.Net.Socket命名空间,在这个命名空间里面有以下几个常用的重要类分别是:
·Socket类 这个低层的类用于管理连接,WebRequest,TcpClient和UdpClient在内部使用这个类。
·NetworkStream类 这个类是从Stream派生出来的,它表示来自网络的数据流
·TcpClient类 允许创建和使用TCP连接
·TcpListener类 允许监听传入的TCP连接请求
·UdpClient类 用于UDP客户创建连接(UDP是另外一种TCP协议,但没有得到广泛的使用,主要用于本地网络)

一、使用Socket实现两机通信(TCP)

示例代码请见附件<使用Socket实现两机通信>

c# 代码

  1. Socket(AddressFamily addressFamily,SocketType socketType,ProtocolType protocolType);

其中,addressFamily 参数指定 Socket 使用的寻址方案,socketType 参数指定 Socket 的类型,protocolType 参数指定 Socket 使用的协议。

服务端:

1、创建Socket实例

c# 代码

  1. Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 

2、将此Socket实例绑定至服务器(本机)的某个端口

c# 代码

  1. IPAddress ip = IPAddress.Parse("172.16.1.15"); 
  2. IPEndPoint ipe = new IPEndPoint(ip, 2000); 
  3. s.Bind(ipe);//绑定2000端口

3、开始监听,如果监听到则进行相应的处理

客户端:

c# 代码

  1. while (true
  2. s.Listen(0);//开始监听
  3. Socket temp = s.Accept();//为新建连接创建新的Socket。
  4. string recvStr = ""; 
  5. byte[] recvBytes = new byte[1024]; 
  6. int bytes; 
  7. bytes = temp.Receive(recvBytes, recvBytes.Length, 0);//从客户端接受信息
  8. recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes); 
  9. Console.WriteLine("Server Get Message:{0}", recvStr);//把客户端传来的信息显示出来
  10. string sendStr = "From server: Ok!Client Send Message Sucessful!"; 
  11. byte[] bs = Encoding.ASCII.GetBytes(sendStr); 
  12. temp.Send(bs, bs.Length, 0);//返回客户端成功信息
  13. temp.Close(); 

1、创建Socket实例

c# 代码

  1. Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

2、将此Socket连接到服务器

c# 代码

  1. IPAddress ip = IPAddress.Parse("172.16.1.15"); 
  2. IPEndPoint ipe = new IPEndPoint(ip, 2000);//把ip和端口转化为IPEndPoint实例
  3. c.Connect(ipe);//连接到服务器

3、向服务器发送信息

c# 代码

  1. string sendStr = "hello!This is a socket test"; 
  2. byte[] bs = Encoding.ASCII.GetBytes(sendStr); 
  3. c.Send(bs, bs.Length, 0);//发送测试信息

4、接收服务器返回的信息

c# 代码

  1. string recvStr = ""; 
  2. byte[] recvBytes = new byte[1024]; 
  3. int bytes; 
  4. bytes = c.Receive(recvBytes, recvBytes.Length, 0);//从服务器端接受返回信息
  5. recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes); 
  6. Console.WriteLine("Client Get Message:{0}", recvStr);//显示服务器返回信息

5、关闭Socket

c# 代码

  1. c.Close();

Socket通信.rar

.Net中的Socket通讯的更多相关文章

  1. 利用BlazeDS的AMF3数据封装与Flash 进行Socket通讯

    前几天看到了Adobe有个开源项目BlazeDS,里面提供了Java封装AMF3格式的方法.这个项目貌似主要是利用Flex来Remoting的,不过我们可以利用他来与Flash中的Socket通讯. ...

  2. 关于Socket通讯中的Close_wait状态

    关于Socket通讯中的Close_wait状态 文/转 编辑 编者按:使用Socket通讯,有时我们查看端口状态的时候,经常会发现Socket处于close_wait状态,从而影响系统性能,此文或许 ...

  3. 试解析Tomcat运行原理(一)--- socket通讯

    关于这篇文章也确实筹划了很久,今天决定开篇写第一篇,说起tomcat首先很容易联想到IIS,因为我最开始使用的就是.net技术,我第一次使用asp写学生成绩管理系统后,很茫然如何让别人都能看到或者说使 ...

  4. c# TCP Socket通讯基础

    在做网络通讯方面的程序时,必不可少的是Socket通讯. 那么我们需要有一套既定的,简易的通讯流程. 如下: <pre name="code" class="csh ...

  5. 详细讲解nodejs中使用socket的私聊的方式

    详细讲解nodejs中使用socket的私聊的方式 在上一次我使用nodejs+express+socketio+mysql搭建聊天室,这基本上就是从socket.io的官网上的一份教程式复制学习,然 ...

  6. Android笔记:Socket通讯常见问题

    经验证的socket通讯问题 1.如果是模拟器和本机PC直接通讯,需要使用本机IP地址 而不是 10.0.2.2  如本机的静态地址为192.168.1.2 则直接使用该地址 2.接收和连接代码不能在 ...

  7. Socket网络通讯开发总结之:Java 与 C进行Socket通讯 + [备忘] Java和C之间的通讯

    Socket网络通讯开发总结之:Java 与 C进行Socket通讯 http://blog.sina.com.cn/s/blog_55934df80100i55l.html (2010-04-08 ...

  8. 34、Android中基于Socket的网络通信(一)

    Socket又称”套接字”,应用程序通常通过”套接字”向网络发出请求或者应答网络请求. 在java中,Socket和ServerSocket类库位于java.net包中,ServerSocket用于服 ...

  9. Protobuf实现Android Socket通讯开发教程

    本节为您介绍Protobuf实现Android Socket通讯开发教程,因此,我们需要先了理一下protobuf 是什么? Protocol buffers是一种编码方法构造的一种有效而可扩展的格式 ...

随机推荐

  1. 1.7.4.2 Local Parameters in Queries--局部参数

    1. 局部参数 Local parameters是在solr请求中指定一个查询参数.Local parameters提供了一个方式以添加元数据到某个参数类型中,如查询字符串(在solr文档中,Loca ...

  2. 干货:VLDB论文摘要-阿里技术突破性创新

    阿里技术突破性创新 世界顶级大规模数据处理分析管理会议VLDB(VERY LARGE DATA BASE)于9月1日至5日在杭州举办,该会议也是也是大数据云计算领域的盛会,阿里巴巴两个团队在这个会议上 ...

  3. C#读取Word模板替换相应的字符串(标签)生成新的Word

    在平常工作中,生成word的方式主要是C#读取html的模板文件处理之后保存为.doc文件,这样的好处是方便,快捷,能满足大部分的需求.不过有些特殊的需求并不能满足,如要生成的Word为一个表格,只是 ...

  4. 【原创】一些常用的Vi命令,可帮助脱离鼠标

    使用Vi编写代码时,如果想脱离鼠标,需要使用一些命令快捷键,下面罗列了一些常用的并且容易记住的: 1. 命令模式下,移动光标或跳转 0到行首 ^到行首第一个非空字符 $到行尾非空字符 fx向后移动光标 ...

  5. js将人民币金额转换为大写

    function upDigit(n) { var fraction = ['角', '分']; var digit = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒' ...

  6. GUID (全局唯一标识符)

         全局唯一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度为128位的数字标识符.GUID主要用于在拥有多个节点.多台计算机的网络或系统中. ...

  7. VB.NET 小程序 1

    Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ...

  8. Common工具类的验证码类的使用(未实现验证)

    验证码接收 using System; using System.Collections.Generic; using System.Linq; using System.Web; using CZB ...

  9. Java开发从零开始填坑

    开始学习Java,感觉较.NET知识更零碎一些,所以开个帖子把自己踩过的坑记录下来,都是边边角角网上不容易找到的东西. 1.java命令格式:>cd %parent-of-pakadgePath ...

  10. Part 57 to 58 Why should you override ToString and Equal Method

    Part 57 Why should you override ToString Method sometimes you can override ToString method like that ...