很久之前用过Socket,由于近期项目需要用socket传输视频流,早上花了半小时回顾了一下。

Socket类简要介绍

socket下提供的主要类有四个,分别是socket,tcpclient,tcplistener,udpclient,他们的作用如下:

  1. Socket 含有大量方法用于网络连接,.net中的一些高级类如webrequest,tcpclient等均调用此类来进行操作
  2. TcpClient  提供客户端连接,用于创建和使用tcp网络服务
  3. TcpListener  用于从tcp网络客户端侦听连接
  4. UdpClient  为udp客户端创建连接,是tcp的备用协议,在本地网络使用

Demo测试

这个Demo含有两个project,一个是server,一个是client,为了简洁,均采用控制台程序

服务端:

代码

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 
using System.Net.Sockets;

namespace SocketServer 

    class Program 
    { 
        public static TcpListener tcpListener; 
        private static NetworkStream networkStream; 
        private static StreamReader streamReader; 
        private static StreamWriter streamWriter; 
        public static Socket socketForClient;

static void Main(string[] args) 
        { 
            try 
            { 
                tcpListener = new TcpListener(1234); 
                tcpListener.Start(); 
                Console.WriteLine("服务启动,开始监控1234端口");

socketForClient = tcpListener.AcceptSocket(); 
                networkStream = new NetworkStream(socketForClient); 
                streamWriter = new StreamWriter(networkStream); 
                streamReader = new StreamReader(networkStream); 
                try 
                { 
                    if (socketForClient.Connected) 
                    { 
                        Console.WriteLine("客户端已连接"); 
                        string strInput = streamReader.ReadLine(); 
                        Console.WriteLine("从客户端传入的字符串是:" + strInput); 
                        string strOutput = strInput.ToUpper(); 
                        streamWriter.Write(strOutput); 
                        Console.WriteLine("转换后字符串是" + strOutput); 
                        streamWriter.Flush(); 
                    } 
                } 
                catch (Exception ex) 
                { 
                    Console.WriteLine("出现异常:" + ex.Message); 
                } 
            } 
            catch(Exception ex) 
            { 
                Console.WriteLine("发生异常,关闭连接"); 
                tcpListener.Stop(); 
                streamWriter.Close(); 
                streamReader.Close(); 
                networkStream.Close(); 
            } 
        } 
    } 
}

客户端:

代码

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 
using System.Net.Sockets;

namespace SocketClient 

    class Program 
    { 
        public static TcpClient myclient; 
        private static NetworkStream networkStream; 
        private static StreamReader streamReader; 
        private static StreamWriter streamWriter;

static void Main(string[] args) 
        { 
            try 
            { 
                try 
                { 
                    myclient = new TcpClient("localhost", 1234); 
                    Console.WriteLine("已经连接到localhost的1234端口"); 
                } 
                catch (Exception ex) 
                { 
                    Console.WriteLine("未能在1234端口连接上服务器"); 
                } 
                networkStream = myclient.GetStream(); 
                streamReader = new StreamReader(networkStream); 
                streamWriter = new StreamWriter(networkStream); 
                Console.WriteLine("请输入一串小写字母:"); 
                string strInput = Console.ReadLine(); 
                streamWriter.Write(strInput); 
                Console.WriteLine("正在发送消息"); 
                streamWriter.Flush(); 
                string strServerComes = streamReader.ReadLine(); 
                Console.WriteLine("正在从服务端收取消息"); 
                Console.WriteLine("从服务端收到的消息是:" + strServerComes); 
            } 
            catch(Exception ex) 
            { 
                Console.WriteLine("发生异常,关闭连接"); 
                streamReader.Close(); 
                streamWriter.Close(); 
                networkStream.Close(); 
            } 
        } 
    } 
}

在windows 7 中需要安全设置,否则socket将无法正常访问端口。

接下来将会做socket与silverlight传输文本及视频流的尝试。

转载于:https://www.cnblogs.com/wengyuli/archive/2010/07/01/soket-review.html

在Silverlight中使用Socket进行通信(1)Socket请求-回复方式的简易数据交换相关推荐

  1. Android中基于TCP协议的网络通信之使用Socket进行通信

    TCP协议被称为一种端到端的协议.这是因为它为两台计算机的连接起到了重要作用:当一台计算机需要与另一台计算机进行接连时,TCP协议会他们之间建立一个连接:用于发送和接收数据的虚拟链路. TCP协议负责 ...

  2. Silverlight实用窍门系列:56.Silverlight中的Binding使用(一)【附带实例源码】

    本文将详细讲述Silverlight中Binding,包括Binding的属性和用法,Binding的数据流向. Binding:一个完整的Binding过程是让源对象中的某个属性值通过一定流向规则进 ...

  3. 物理隔离与数据交换-网闸中的核心技术

    网闸中隔离控制技术的几个发展方向 网闸不同于防火墙,也不同于堡垒机,是因为网闸从物理上保证内外网的不互通,其中隔离控制部分是实现这个物理隔离的关键.这里重点分析目前流行的几种技术: 1.摆渡交换技术 ...

  4. Java中Socket通信-客户端与服务端相互传输对象数据

    场景 Java中Socket通信-服务端和客户端双向传输字符串实现: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1084885 ...

  5. Java 基于 UDP 实现 Socket中的多客户端通信

    这里原理同 TCP/IP 实现多客户端通信的原理是一样的,同样的 UDPClient.java 不变,与上一篇文章中描述的一致,无需修改 UDPServer.java package com.lear ...

  6. Java 基于 TCP/IP 实现 Socket中的多客户端通信

    使用多线程实现多客户端的通信功能, Client.java(客户端)同上一节中的一致,不需要修改 Server.java package com.learn;import java.io.IOExce ...

  7. 如何在Windows环境下的VS中安装使用Google Protobuf完成SOCKET通信

    http://blog.csdn.net/whuancai/article/details/11994341 如何在Windows环境下的VS中安装使用Google Protobuf完成SOCKET通 ...

  8. 浅谈java中的ServerSocket和Socket的通信原理实现聊天及多人聊天

    聊天,QQ,微信,陌陌很多的即时通讯的软件,不管是桌面端还是移动端,在当今社交的时代都是不可或缺的一部分.这时候说Socket和ServerSocket感觉有点老调重弹感觉,相信很多人早就知道如何使用 ...

  9. PHP中如何使用socket进行通信?

    1. socket 概述 socket 也称作套接字,用于描述 IP 地址和端口,是一个通信链的句柄,可以用来实现不同计算机之间的通信.socket 是对 TCP / IP 协议的封装,它只是提供了一 ...

最新文章

  1. Pytorch中用于深度学习常见的激活函数
  2. SQL优化基础 使用索引(一个小例子)
  3. 密码学-hash散列表
  4. This XML file does not appear to have any style information associated with it. The document tree is
  5. Atcoder Keyence Programming Contest 2020 D - Swap and Flip
  6. openssl版本信息和支持的命令
  7. OpenCL用于计算机领域的13个经典案例
  8. 如何在搜狗浏览器中添加扩展工具
  9. 运行Maven是报错:No goals have been specified for this build
  10. 几种特种印花方式简介
  11. 机器视觉:工业镜头专业词汇中英文详解
  12. 串行通信(二):串口流控
  13. 编译报错:/usr/bin/ld: /usr/local/lib/libgflags.a(gflags.cc.o): relocation R_X86_64_32S against `.rodata‘
  14. UNIX再学习 -- RS485 串口编程
  15. 一图读懂 | 亿美软通富媒体消息助力营销价值提升
  16. C/C++实现matlab的imfill()函数
  17. 3、集成逻辑门电路的功能和参数调试
  18. Word自动序号转化为文本格式
  19. 结合黏菌觅食行为的改进多元宇宙算法
  20. 如何使用微信、支付宝提现免手续费

热门文章

  1. Memcached常用操作
  2. 华院数据宣晓华:传统零售商转型电商需攻克大数据三关
  3. 通过Yeoman快速搭建AngularJS webapp应用的实践
  4. 为Windows Server 2012 R2指定授权服务器
  5. 关于webstorm 配置 banbel
  6. 服务器响应HTTP的类型ContentType大全
  7. python 去掉空格_如何从Python DataFrame中去除空格在这个例子中
  8. git 报错:Please make sure you have the correct access rights and the repository exists
  9. Day13-日历模块
  10. windows环境下,如何在Pycharm下安装TensorFlow环境