在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,为了简洁,均采用控制台程序

image

服务端:

 

ExpandedBlockStart.gif代码
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(); 
            } 
        } 
    } 
}

 

客户端:

 

ExpandedBlockStart.gif代码
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(); 
            } 
        } 
    } 
}

 

 

image 

image

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/475931.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java listview控件_ListView普通列表控件的使用

Android中的列表空间非常灵活,可以自定义每一个列表项,实际上每一个列表项就是一个View,在Android定义了3个列表控件:ListView、ExpandableListView和Spinner,其中Spinner就是在Windows中常见的下拉列表框。ListView控…

【Kaggle】Intro to Machine Learning 第一次提交 Titanic

项目官网地址 新手可以参考这篇 8、Getting Started With Titanic,教你如何操作、提交等 自己简要再记录一下: Join the competition 各个 tab 下可以查看数据Data、代码编写Notebooks、讨论、排名、比赛规则、队伍点击 Notebooks,新建文…

在C#代码中执行BCS外部内容类型方法

在前面的博文中我们讨论了如何使用Business Connectivity Services对象模型栏获取已部署在SharePoint BCS中的外部内容类型。 本文中我们将学习如何获取一个ECT的BCS方法集合。并且还要通过Business Connectivity Services对象模型执行其中的Finder方法和SpecificFinder方法。…

java ndc_通过slf4j/log4j的MDC/NDC 实现日志追踪

在分布式系统或者较为复杂的系统中,我们希望可以看到一个客户请求的处理过程所涉及到的所有子系统\模块的处理日志。由于slf4j/log4j基本是日志记录的标准组件,所以slf4j/log4j成为了我的重点研究对象。slf4j/log4j支持MDC,可以实现同一请求的…

java 反射的弊端_java反射机制的一些学习心得小结

概述之前在了解Spring的类加载机制的时候,了解了java的反射机制。但是,我对反射理解一直不深。也一直有点疑惑:Spring为什么利用反射创建对象?直接new对象和依靠反射创建对象有什么区别?什么是动态加载类?什…

LeetCode 1443. 收集树上所有苹果的最少时间(自底向上DFS)

1. 题目 给你一棵有 n 个节点的无向树,节点编号为 0 到 n-1 ,它们中有一些节点有苹果。 通过树上的一条边,需要花费 1 秒钟。 你从 节点 0 出发,请你返回最少需要多少秒,可以收集到所有苹果,并回到节点 0 …

java怎吗从磁盘读文件_编写一个Java应用程序,该程序使用FileInputStream类,实现从磁盘读取本应用程序源代码文件,并将文件内容显示在屏幕上。...

满意答案x786741812013.05.10采纳率:42% 等级:12已帮助:14476人import java.io.FileInputStream;import java.io.InputStreamReader;import java.io.BufferedReader;import java.io.IOException;import java.io.FileNotFoundException;pub…

漂亮的博客搜索框

看到漂亮的搜索框&#xff0c;收藏... 主要用背景图片和输入框和链接隐藏完成。 可以在IE6,ff&#xff0c;chorme下兼容... <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quo…

LeetCode 863. 二叉树中所有距离为 K 的结点(公共祖先/ DFS+BFS)

文章目录1. 题目2. 解题2.1 公共祖先2.2 建图BFS1. 题目 给定一个二叉树&#xff08;具有根结点 root&#xff09;&#xff0c; 一个目标结点 target &#xff0c;和一个整数值 K 。 返回到目标结点 target 距离为 K 的所有结点的值的列表。 答案可以以任何顺序返回。 示例 …

多线程 流水线 java_Java Lock锁多线程中实现流水线任务

下面程序代码通过使用Lock锁执行简单的流水线任务&#xff1a;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/*** author lzq* data 2020/4/29 0029 - 下午 9:48*/public class Test…

LeetCode 962. 最大宽度坡(单调栈)

1. 题目 给定一个整数数组 A&#xff0c;坡是元组 (i, j)&#xff0c;其中 i < j 且 A[i] < A[j]。这样的坡的宽度为 j - i。 找出 A 中的坡的最大宽度&#xff0c;如果不存在&#xff0c;返回 0 。 示例 1&#xff1a; 输入&#xff1a;[6,0,8,2,1,5] 输出&#xff1…

python 保存文件 吃内存_孤荷凌寒自学python第三十七天python的文件与内存变量之间的序列化与反序列化...

孤荷凌寒自学python第三十七天python的文件与内存变量之间的序列化与反序列化(完整学习过程屏幕记录视频地址在文末&#xff0c;手写笔记在文末)一、什么是序列化与反序列化序列化是指将内存中的数据进行指定规则的格式梳理&#xff0c;使之方便按一定格式保存到文件中。我的理…

【Kaggle】Intermediate Machine Learning(管道+交叉验证)

文章目录4. Pipelines 管道5. Cross-Validation 交叉验证上一篇&#xff1a;【Kaggle】Intermediate Machine Learning&#xff08;缺失值文字特征处理&#xff09; 下一篇&#xff1a;【Kaggle】Intermediate Machine Learning&#xff08;XGBoost Data Leakage&#xff09; …

LeetCode 201. 数字范围按位与(位运算)

文章目录1. 题目2. 解题2.1 按位查找02.2 两数直接都往右移动&#xff0c;直到相等1. 题目 给定范围 [m, n]&#xff0c;其中 0 < m < n < 2147483647&#xff0c;返回此范围内所有数字的按位与&#xff08;包含 m, n 两端点&#xff09;。 示例 1: 输入: [5,7] 输…

编php矩阵求和,PHP二维数组如何求和?

PHP二维数组求和的方法&#xff1a;1、使用array_sum和array_map函数求和1)、PHP7.2以下可用<?php $arr array(0>array(id>1,tol>10),1>array(id>3,tol>12),2>array(id>8,tol>5));//输出tol值的和echo array_sum(array_map(create_function($v…

LeetCode 1311. 获取你好友已观看的视频(BFS+哈希map+vector排序)

1. 题目 有 n 个人&#xff0c;每个人都有一个 0 到 n-1 的唯一 id 。 给你数组 watchedVideos 和 friends &#xff0c;其中 watchedVideos[i] 和 friends[i] 分别表示 id i 的人观看过的视频列表和他的好友列表。 Level 1 的视频包含所有你好友观看过的视频&#xff0c; …

发布ASP.NET程序至IIS7

以前一直和IIS5打交道&#xff0c;后来系统升级到WIN7,自然的就用上了IIS7了&#xff0c;不过因为对IIS7服务器没有系统的了解&#xff0c;所以在自己机子上测试发布网站时&#xff0c;总是遇到各种各样的问题&#xff0c;当时就放弃了&#xff0c;准备有时间再研究的&#xff…

LeetCode 1319. 连通网络的操作次数(BFS/DFS/并查集)

文章目录1. 题目2. 解题2.1 BFS2.2 DFS2.3 并查集1. 题目 用以太网线缆将 n 台计算机连接成一个网络&#xff0c;计算机的编号从 0 到 n-1。 线缆用 connections 表示&#xff0c;其中 connections[i] [a, b] 连接了计算机 a 和 b。 网络中的任何一台计算机都可以通过网络直…

1D機身調焦方法

原文作者&#xff1a;Kent 原文地址&#xff1a;http://www.ldsclub.net/forum/viewthread.php?tid21513&extrapage%3D1&page1另附大兔子調焦心得&#xff1a;http://www.ldsclub.net/forum/viewthread.php?tid28268&extrapage%3D1 需要1.27規格的6角手柄本次轉文…

kdevelop php,KDevelop 5.2开放源代码IDE发布,改进了C ++,PHP和Python支持

KDevelop 5.2近半年的发布&#xff0c;是一个主要的发行版&#xff0c;它在前面版本KDevelop 5.1中实现的Analyzer菜单条目中引入了更多的分析器插件。这些包括Heaprack&#xff0c;一个用C / C 编写的Linux应用程序的堆内存分析器和Cppcheck(一种流行的C 编程语言静态分析器)&…