起步socket编程 C#

用C#来编写SOCKET程序,总的来说还是比较方便的,微软帮忙我们做了很多工作。SOCKET编程应用很多, 相关资料网上也很多,因为工作需要,前一段时间也用C#编写一个socket程序,在这里写一下也算一个记录。

在服务器端创建一个Socket,使用Bind方法绑定所指定的接口使Socket与一个本地终结联,并通过Listen方法侦听该接口上的请求,当侦听到用户端的连接时,调用Accept完成连接的操作,创建新的Socket以处理传入的连接请求。

使用完Socket后,记住使用Shutdown方法禁用Socket,并使用Close方法关闭Socket

在C#中,微软提供了socket 类

public class Socket : IDisposable

{

public Socket(AddressFamily addressFamily, SocketType socketType, ProtocolType protocolType);

//......

}

但是编码的时候一般不直接使用socket类,因为有两个类封装得更好。 TcpListener 和 TcpClient 。

首先是服务端,绑定一个端口号,开启服务。

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

namespace ConsoleSocketServer
{
    class Program
    {
        private static TcpListener tcpServer = null;

        static void Main(string[] args)
        {
            IPAddress iPAddress = IPAddress.Any;
            tcpServer = new TcpListener(iPAddress, 999);
            //999是端口号,可以随便改 0-1024,主要不要和什么80,8080之类的常用端口号相冲突哦。

            tcpServer.Start();
            Console.WriteLine("监听已启动......");

            byte[] msg = Encoding.UTF8.GetBytes("服务端数据");
            byte[] bytes = new byte[256];

            while (true)
            {
                TcpClient client = tcpServer.AcceptTcpClient();
                int i = client.Client.Receive(bytes);

                Console.WriteLine("接受:" + Encoding.UTF8.GetString(bytes));

                client.Client.Send(msg);

                client.Close();

                Thread.Sleep(1000);
            }
        }
    }
}
客户端将是通过TcpClient的Connect方法来连接到指定的服务器,并通过Send方法发送数据,Receive接收数据。具体代码如下:
using System;
using System.Text;
using System.Collections;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Threading;
using System.Collections.Generic;

namespace ConsoleSocketClient
{
    class Program
    {
        private static TcpClient client = new TcpClient();

        static void Main(string[] args)
        {
            client.Connect("127.0.0.1", 999);//这里连得是本机999端口号
            Console.WriteLine("连接成功......");

            byte[] data = Encoding.UTF8.GetBytes("客户端数据");
            Socket socket = client.Client;
            socket.Send(data, data.Length, SocketFlags.None);
            //Console.WriteLine("发送成功" + Encoding.UTF8.GetString(data));

            socket.Receive(data, SocketFlags.None);
            Console.WriteLine("接受数据" +  Encoding.UTF8.GetString(data));

            Console.ReadKey();
        }
        }
    }

当然这个只是简单的说明socket如何通信,上面只是代码的简单演示,仅帮助大家学习、理解SOCKET编程,SOCKET实战还有很多路需要走。在实际编程过程中,SOCKET大多都与多线程有关系。没有多线程,可以说SOCKET编程就没有太多的意义。因为SOCKET涉及到太多了阻塞、运行和等待。如果以前没有做过SOCKET编程,很多时候会感觉程序莫名其妙的不动了,或者说是没有正常的响应了。其实这个时候往往就是程序处于阻塞状态。如果没有相应经历,总有点怪怪的感觉。解决办法就是采用多线程的方式。具体怎么弄,后面的文章再来写写。

上述代码在.net 4.0中编译通过。

时间: 2024-11-05 19:45:35

起步socket编程 C#的相关文章

PHP Socket编程起步

这是一篇来自php100的博文,看了之后,对socket 编程有一点点的理解,特此记录一下: 原文地址 [ http://www.php100.com/html/webkaifa/PHP/PHP/2008/1218/970.html  ] 让我们以一个简单的例子开始---一个接收输入字符串,处理并返回这个字符串到客户端的TCP服务.下面是相应的代码: PHP 代码: <?// 设置一些基本的变量$host="192.168.1.99";$port=1234;// 设置超时时间se

iOS开发——网络编程OC篇&amp;Socket编程

Socket编程 一.网络各个协议:TCP/IP.SOCKET.HTTP等 网络七层由下往上分别为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 其中物理层.数据链路层和网络层通常被称作媒体层,是网络工程师所研究的对象: 传输层.会话层.表示层和应用层则被称作主机层,是用户所面向和关心的内容. http协议   对应于应用层 tcp协议    对应于传输层 ip协议     对应于网络层 三者本质上没有可比性.  何况HTTP协议是基于TCP连接的. TCP/IP是传输层协议,主要

Linux Socket编程-(转自吴秦(Tyler))

"一切皆Socket!" 话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket. --有感于实际编程和开源项目研究. 我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的类型有哪些?还有socket的基本函数,这些都是本文想介绍的.本文的主要内容如下: 1.网络中进程之间如何通信?

Python Socket 编程——聊天室演示样例程序

上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和client的代码了解主要的 Python Socket 编程模型.本文再通过一个样例来加强一下对 Socket 编程的理解. 聊天室程序需求 我们要实现的是简单的聊天室的样例,就是同意多个人同一时候一起聊天.每一个人发送的消息全部人都能接收到,类似于 QQ 群的功能,而不是点对点的 QQ 好友之间的聊天.例如以下图: 图来自:http://www.ibm.com/developerworks/linux/tu

linux下socket编程-进程间通信

一.什么是Socket Socket接口是TCP/IP网络通信的API,Socket接口定义了许多函数或例程,可以用它们来开发TCP/IP网络上的应用程序. Socket类型有两种:流式Socket (SOCK_STREAM)和数据报式Socket(SOCK_DGRAM).流式是一种面向连接针对于面向连接的TCP服务应用:数据报式Socket是一种无连接针对无连接的UDP服务应用.sock通信的基本过程如下: 二.Socket建立 程序可以调用Socket函数建立socket,该函数返回一个类似

读懂Java中的Socket编程(转)

Socket,又称为套接字,Socket是计算机网络通信的基本的技术之一.如今大多数基于网络的软件,如浏览器,即时通讯工具甚至是P2P下载都是基于Socket实现的.本文会介绍一下基于TCP/IP的Socket编程,并且如何写一个客户端/服务器程序. 餐前甜点 Unix的输入输出(IO)系统遵循Open-Read-Write-Close这样的操作范本.当一个用户进程进行IO操作之前,它需要调用Open来指定并获取待操作文件或设备读取或写入的权限.一旦IO操作对象被打开,那么这个用户进程可以对这个

(转)Java Socket编程

原文出自:http://www.cnblogs.com/rocomp/p/4790340.html Socket是网络驱动层提供给应用程序编程接口和一种机制.可以把Socket比喻成一个港口码头,应用程序只要把货物放到港口码头上,就算完成了货物的运送.对于接收方应用程序也要创建一个港口码头,只需等待货物到达码头后将货物取走. InetAddress          InetAddress类用于标识网络上的硬件资源,标识互联网协议(IP)地址.           该类没有构造方法       

Java Socket 编程

1. 背景 网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来. java.net 包中 J2SE 的 API 包含有类和接口,它们提供低层次的通信细节.你可以直接使用这些类和接口,来专注于解决问题,而不用关注通信细节. java.net 包中提供了两种常见的网络协议的支持: TCP:TCP 是传输控制协议的缩写,它保障了两个应用程序之间的可靠通信.通常用于互联网协议,被称 TCP / IP. UDP:UDP 是用户数据报协议的缩写,一个无连接的协议.提供了应用程序之间要

Python Socket编程

因需要做一个监测TCP数据内容的小插件,学习了局域网内部的封装好的传输软件Socket: 一.Socket的简介如下: 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket. 建立网络通信连接至少要一对端口号(socket).socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员 做网络开发所用的接口,这就是Socket编程接口:HTTP是轿车,提供了封装或者显示数据的具体形式:Socket是发动机, 提供了网络通信的能力.