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

简介:

很久之前用过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传输文本及视频流的尝试。

 




     本文转自wengyuli 51CTO博客,原文链接:http://blog.51cto.com/wengyuli/587601,如需转载请自行联系原作者



相关文章
|
4月前
|
网络协议 Unix Linux
# 2个类轻松构建高效Socket通信库
本文介绍了一种通过两个类`EpollEventHandler`和`IEpollEvent`构建高效Socket通信库的方法。该库支持TCP、UDP和Unix域套接字,采用I/O多路复用技术(如epoll),提升并发处理能力。通过抽象基类和具体事件类的设计,简化了API使用,便于开发者快速上手。文章还提供了服务端与客户端的实例代码,展示其在实际项目中的应用效果。此Socket库适应嵌入式环境,功能定制性强,有助于减少外部依赖并提升维护效率。
118 68
# 2个类轻松构建高效Socket通信库
|
4月前
|
网络协议 开发者 Python
Socket如何实现客户端和服务器间的通信
通过上述示例,展示了如何使用Python的Socket模块实现基本的客户端和服务器间的通信。Socket提供了一种简单且强大的方式来建立和管理网络连接,适用于各种网络编程应用。理解和掌握Socket编程,可以帮助开发者构建高效、稳定的网络应用程序。
156 10
|
4月前
|
SQL druid 定位技术
【YashanDB知识库】查询空间数据提示This socket has been closed.
【YashanDB知识库】查询空间数据提示This socket has been closed.
|
11月前
|
Python
python socket 简单通信
python socket 简单通信
143 1
|
11月前
|
网络协议 安全 网络安全
网络编程:基于socket的TCP/IP通信。
网络编程:基于socket的TCP/IP通信。
|
9月前
|
网络协议 Linux 应用服务中间件
Socket通信之网络协议基本原理
【10月更文挑战第10天】网络协议定义了机器间通信的标准格式,确保信息准确无损地传输。主要分为两种模型:OSI七层模型与TCP/IP模型。
|
10月前
|
网络协议 Linux 应用服务中间件
Socket通信之网络协议基本原理
【9月更文挑战第14天】网络协议是机器间交流的约定格式,确保信息准确传达。主要模型有OSI七层与TCP/IP模型,通过分层简化复杂网络环境。IP地址全局定位设备,MAC地址则在本地网络中定位。网络分层后,数据包层层封装,经由不同层次协议处理,最终通过Socket系统调用在应用层解析和响应。
|
11月前
|
网络协议 数据格式 Python
python Socket无限发送接收数据方式
Socket是指套接字,是对网络中不同主机上的应用进程之间进行双向通信的端点的一种抽象。 一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。