在Silverlight中使用Socket进行通信(1)Socket请求-回复方式的简易数据交换
很久之前用过Socket,由于近期项目需要用socket传输视频流,早上花了半小时回顾了一下。
Socket类简要介绍
socket下提供的主要类有四个,分别是socket,tcpclient,tcplistener,udpclient,他们的作用如下:
- Socket 含有大量方法用于网络连接,.net中的一些高级类如webrequest,tcpclient等均调用此类来进行操作
- TcpClient 提供客户端连接,用于创建和使用tcp网络服务
- TcpListener 用于从tcp网络客户端侦听连接
- UdpClient 为udp客户端创建连接,是tcp的备用协议,在本地网络使用
Demo测试
这个Demo含有两个project,一个是server,一个是client,为了简洁,均采用控制台程序
服务端:
![](/assets/blank.gif)
![](/assets/blank.gif)
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();
}
}
}
}
客户端:
![](/assets/blank.gif)
![](/assets/blank.gif)
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请求-回复方式的简易数据交换相关推荐
- Android中基于TCP协议的网络通信之使用Socket进行通信
TCP协议被称为一种端到端的协议.这是因为它为两台计算机的连接起到了重要作用:当一台计算机需要与另一台计算机进行接连时,TCP协议会他们之间建立一个连接:用于发送和接收数据的虚拟链路. TCP协议负责 ...
- Silverlight实用窍门系列:56.Silverlight中的Binding使用(一)【附带实例源码】
本文将详细讲述Silverlight中Binding,包括Binding的属性和用法,Binding的数据流向. Binding:一个完整的Binding过程是让源对象中的某个属性值通过一定流向规则进 ...
- 物理隔离与数据交换-网闸中的核心技术
网闸中隔离控制技术的几个发展方向 网闸不同于防火墙,也不同于堡垒机,是因为网闸从物理上保证内外网的不互通,其中隔离控制部分是实现这个物理隔离的关键.这里重点分析目前流行的几种技术: 1.摆渡交换技术 ...
- Java中Socket通信-客户端与服务端相互传输对象数据
场景 Java中Socket通信-服务端和客户端双向传输字符串实现: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1084885 ...
- Java 基于 UDP 实现 Socket中的多客户端通信
这里原理同 TCP/IP 实现多客户端通信的原理是一样的,同样的 UDPClient.java 不变,与上一篇文章中描述的一致,无需修改 UDPServer.java package com.lear ...
- Java 基于 TCP/IP 实现 Socket中的多客户端通信
使用多线程实现多客户端的通信功能, Client.java(客户端)同上一节中的一致,不需要修改 Server.java package com.learn;import java.io.IOExce ...
- 如何在Windows环境下的VS中安装使用Google Protobuf完成SOCKET通信
http://blog.csdn.net/whuancai/article/details/11994341 如何在Windows环境下的VS中安装使用Google Protobuf完成SOCKET通 ...
- 浅谈java中的ServerSocket和Socket的通信原理实现聊天及多人聊天
聊天,QQ,微信,陌陌很多的即时通讯的软件,不管是桌面端还是移动端,在当今社交的时代都是不可或缺的一部分.这时候说Socket和ServerSocket感觉有点老调重弹感觉,相信很多人早就知道如何使用 ...
- PHP中如何使用socket进行通信?
1. socket 概述 socket 也称作套接字,用于描述 IP 地址和端口,是一个通信链的句柄,可以用来实现不同计算机之间的通信.socket 是对 TCP / IP 协议的封装,它只是提供了一 ...
最新文章
- Pytorch中用于深度学习常见的激活函数
- SQL优化基础 使用索引(一个小例子)
- 密码学-hash散列表
- This XML file does not appear to have any style information associated with it. The document tree is
- Atcoder Keyence Programming Contest 2020 D - Swap and Flip
- openssl版本信息和支持的命令
- OpenCL用于计算机领域的13个经典案例
- 如何在搜狗浏览器中添加扩展工具
- 运行Maven是报错:No goals have been specified for this build
- 几种特种印花方式简介
- 机器视觉:工业镜头专业词汇中英文详解
- 串行通信(二):串口流控
- 编译报错:/usr/bin/ld: /usr/local/lib/libgflags.a(gflags.cc.o): relocation R_X86_64_32S against `.rodata‘
- UNIX再学习 -- RS485 串口编程
- 一图读懂 | 亿美软通富媒体消息助力营销价值提升
- C/C++实现matlab的imfill()函数
- 3、集成逻辑门电路的功能和参数调试
- Word自动序号转化为文本格式
- 结合黏菌觅食行为的改进多元宇宙算法
- 如何使用微信、支付宝提现免手续费
热门文章
- Memcached常用操作
- 华院数据宣晓华:传统零售商转型电商需攻克大数据三关
- 通过Yeoman快速搭建AngularJS webapp应用的实践
- 为Windows Server 2012 R2指定授权服务器
- 关于webstorm 配置 banbel
- 服务器响应HTTP的类型ContentType大全
- python 去掉空格_如何从Python DataFrame中去除空格在这个例子中
- git 报错:Please make sure you have the correct access rights and the repository exists
- Day13-日历模块
- windows环境下,如何在Pycharm下安装TensorFlow环境