在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,如需转载请自行联系原作者



相关文章
|
2月前
|
Python
python socket 简单通信
python socket 简单通信
37 1
|
2月前
|
网络协议 安全 网络安全
网络编程:基于socket的TCP/IP通信。
网络编程:基于socket的TCP/IP通信。
142 0
|
24天前
|
网络协议 Linux 应用服务中间件
Socket通信之网络协议基本原理
【9月更文挑战第14天】网络协议是机器间交流的约定格式,确保信息准确传达。主要模型有OSI七层与TCP/IP模型,通过分层简化复杂网络环境。IP地址全局定位设备,MAC地址则在本地网络中定位。网络分层后,数据包层层封装,经由不同层次协议处理,最终通过Socket系统调用在应用层解析和响应。
|
2月前
|
网络协议 数据格式 Python
python Socket无限发送接收数据方式
Socket是指套接字,是对网络中不同主机上的应用进程之间进行双向通信的端点的一种抽象。 一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。
|
2月前
|
网络协议 Linux 应用服务中间件
Socket通信之网络协议基本原理
【8月更文挑战第27天】网络协议定义了机器间通信的标准格式,确保信息准确无损地传输。主要分为两种模型:OSI七层模型与TCP/IP模型。
|
2月前
|
网络协议
socket编程(2) -- TCP通信
socket编程(2) -- TCP通信
34 0
|
3月前
|
Java 数据格式
Java面试题:简述Java Socket编程的基本流程,包括客户端和服务器的创建与通信。
Java面试题:简述Java Socket编程的基本流程,包括客户端和服务器的创建与通信。
42 0
|
3月前
|
网络协议 安全 Java
深入了解Java中的网络编程与Socket通信
深入了解Java中的网络编程与Socket通信
|
3月前
|
网络协议 开发者 Python
深度探索Python Socket编程:从理论到实践,进阶篇带你领略网络编程的魅力!
【7月更文挑战第25天】在网络编程中, Python Socket编程因灵活性强而广受青睐。本文采用问答形式深入探讨其进阶技巧。**问题一**: Socket编程基于TCP/IP,通过创建Socket对象实现通信,支持客户端和服务器间的数据交换。**问题二**: 提升并发处理能力的方法包括多线程(适用于I/O密集型任务)、多进程(绕过GIL限制)和异步IO(asyncio)。**问题三**: 提供了一个使用asyncio库实现的异步Socket服务器示例,展示如何接收及响应客户端消息。通过这些内容,希望能激发读者对网络编程的兴趣并引导进一步探索。
33 4
|
3月前
|
网络协议 Python
网络世界的建筑师:Python Socket编程基础与进阶,构建你的网络帝国!
【7月更文挑战第26天】在网络的数字宇宙中,Python Socket编程是开启网络世界大门的钥匙。本指南将引领你从基础到实战,成为网络世界的建筑师。
55 2