这东西很多朋友都有写过了,我也就写着玩玩,就当做个笔记吧。不废话了。

  TCP/IP在数据通信中被广泛的使用,自然得包含客户端和服务端,当然,自己自言自语不是什么不可以,可那样貌似有点神经。

  好了,那就先来建立服务端吧。

  1、新建一个项目,就取名叫MyServer吧,然后敲入如下代码:

using System;
using System.Net;
using System.Net.Sockets;

namespace MyServer
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Server服务已启动……");
            IPAddress ip = Dns.GetHostEntry("localhost").AddressList[0];

TcpListener listener = new TcpListener(ip, 250);
            listener.Start(); // 开始侦听

Console.WriteLine("开始监听……");
            Console.WriteLine("\n输入\"Q\"键退出。");
            ConsoleKey key;
            do
            {
                key = Console.ReadKey(true).Key;
            }
            while (key != ConsoleKey.Q);
        }
    }
}

  好了,运行……显示服务已启动。

  接下来看看我们监听的端口号250是不是已经在被监听状态。如下图:

  2、好啦,一切正常。下面开始来编写客户端吧。

  重新打开一个VS窗口,新建项目MyClient,然后录入如下代码:

using System;
using System.Net.Sockets;

namespace MyClient
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("客户端启动……");
            TcpClient client = new TcpClient();
            try
            {
                //与服务器连接
                client.Connect("localhost", 250);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                return;
            }
            // 打印连接到的服务端信息
            Console.WriteLine("已经成功与客户端建立连接!{0} --> {1}", client.Client.LocalEndPoint, client.Client.RemoteEndPoint);

Console.WriteLine("\n输入\"Q\"键退出。");
            ConsoleKey key;
            do
            {
                key = Console.ReadKey(true).Key;
            }
            while (key != ConsoleKey.Q);
        }
    }
}

  看起来一切都是那么清晰明了,好啦,启动运行——沃日!没反应?打个断点跟踪一下试试?

  看到那个异常了不?“由于目标计算机积极拒绝,无法连接。127.0.0.1:250”

  靠,我的目标计算机这么积极的啊?是防火墙干的好事吗?关了——不行,一样。端口号被占用了?不能用250?那我换2500呢?多换几个试试……:-D:-D还是不可以的,说明没有端口号什么事。那程序运行权限不够?那我用管理员运行下试试——还是不行。这玩意儿真是不如WCF那么省心啊!

  好吧,我把这localhost换成IP地址试试。先通过ipconfig看看自己的IP地址是什么,额,192.168.175.1,好吧,都换了。

  服务端的IP那里换成:

  IPAddress ip = IPAddress.Parse("192.168.175.1");

  客户端那换成:

  client.Connect(System.Net.IPAddress.Parse("192.168.175.1"), 2500);

  再运行试试,通了通了,可以了诶!看下图:

  呵呵呵,对了,看到上图中那两个端口号没?第一个来自客户端,是由客户端自个儿自己随机分配的,后面那个2500就是我们监听的服务器端的端口号(把250-->2500)

  其实TCP/IP这东西啊,服务端和客户端,真是要在茫茫人海中,找到对方不容易啊。即使你知道她家在哪儿,而且还有她们家的钥匙,要是你在去她们家的路上遇到个程咬金挡路,不让你过去你也没办法。所以,为了能够顺利到她们家,我们就得想想其它办法了。也就是……回头有空的时候我再来写一下怎么确保顺利到达她们家吧。

c# TCP/IP编程的更多相关文章

  1. linux tcp/ip编程和windows tcp/ip编程差别以及windows socket编程详解

    最近要涉及对接现有应用visual c++开发的tcp客户端,花时间了解了下windows下tcp开发和linux的差别,从开发的角度而言,最大的差别是头文件(早期为了推广尽可能兼容,后面越来越扩展, ...

  2. TCP/IP编程 - 1) 基础知识

    1. What Is a Socket?(什么是套接字) A socket is an abstraction through which an application may send and re ...

  3. 【python】TCP/IP编程

    No1: [TCP] 客户端 import socket s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect(('www.sina ...

  4. TCP/IP编程——基于TCP的半关闭

    在TCP服务端和客户端建立连接之后服务端和客户端会分别有两个独立的输入流和输出流,而且相互对应.服务端的输出流对应于客户端的输入流,服务端的输入流对应于客户端的输出流.这是在建立连接之后的状态. 当我 ...

  5. TCP/IP 编程

    http://www.cnblogs.com/ggjucheng/archive/2012/08/18/2645324.html

  6. TCP/IP的经典网络编程

                                                                             TCP/IP网络编程之四书五经             ...

  7. TCP/IP之四书五经[转自2003.12程序员]

    TCP/IP协议是当前广域网和局域网通用的网络协议,因此,基于TCP/IP的编程就格外重要.从应用上来说,现在直接利用C层次Socket API进行TCP/IP编程的人确实越来越少了,各种现成的框架( ...

  8. 标准C实现基于TCP/IP协议的文件传输

    上学期集成程序设计的课堂作业,对于理解TCP/IP实现还是挺有帮助的. TCP/IP编程实现远程文件传输在LUNIX中一般都采用套接字(socket)系统调用. 采用客户/服务器模式,其程序编写步骤如 ...

  9. TCP/IP长连接和短连接

    http://www.cnblogs.com/bigwalnut/articles/2129070.html TCP/IP通信程序设计的丰富多样性 刚接触TCP/IP通信设计的人根据范例可以很快编出一 ...

随机推荐

  1. Install_pygments

    安装Pygments语法高亮 On OS X Leopard, Snow Leopard 1 $ sudo easy_install Pygments Alternatively on OS X wi ...

  2. 从零教你如何获取hadoop2.4源码并使用eclipse关联hadoop2.4源码

    从零教你如何获取hadoop2.4源码并使用eclipse关联hadoop2.4源码http://www.aboutyun.com/thread-8211-1-1.html(出处: about云开发) ...

  3. erlang局域网内节点通信——艰难四步曲 (转)

    http://blog.chinaunix.net/uid-22566367-id-382011.html 在Programming Erlang这本书中,在写到第十章中,主要实现的是不同节点之间的通 ...

  4. GUI、模块化与结对编程(homework-03)

    摘要: 在本次作业博客里,我将主要阐述作业3的收获.作业3表面是将之前的程序转换为图形界面(之前程序见http://www.cnblogs.com/shone/p/3348372.html),然而本质 ...

  5. Java 任务调度

    1.普通方式 /** * 普通thread * 这是最常见的,创建一个thread,然后让它在while循环里一直运行着, * 通过sleep方法来达到定时任务的效果.这样可以快速简单的实现 */ p ...

  6. bzoj 2190 仪仗队(欧拉函数)

    2190: [SDOI2008]仪仗队 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 2245  Solved: 1413[Submit][Statu ...

  7. [iOS 多线程 & 网络 - 2.5] - 小文件上传

    A.文件上传 思路: 发送文件数据给服务器 使用post请求 必须手动设置请求头: 内容大小Content-Length & 内容类型 Content-Type 请求体:文件数据 文件上传的格 ...

  8. [iOS基础控件 - 6.9.3] QQ好友列表Demo TableView

    A.需求 1.使用plist数据,展示类似QQ好友列表的分组.组内成员显示缩进功能 2.组名使用Header,展示箭头图标.组名.组内人数和上线人数 3.点击组名,伸展.缩回好友组   code so ...

  9. Linux下的进程管理

    在操作系统系统中,进程是一个非常重要的概念. 一.Linux中进程的相关知识 1.什么是进程呢? 通俗的来说进程是运行起来的程序.唯一标示进程的是进程描述符(PID),在linux内核中是通过task ...

  10. opencv 彩色图像亮度、对比度调节 直方图均衡化

    直接上代码: #include <Windows.h> #include <iostream>// for stand I/O #include <string> ...