c# TCP/IP编程

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

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

时间: 2024-10-09 14:56:41

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

理解socket与tcp/ip编程相关函数

Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序.要学Internet上的TCP/IP网络编程,必须理解Socket接口. Socket接口设计者最先是将接口放在Unix操作系统里面的.如果了解Unix系统的输入和输出的话,就很容易了解Socket了.网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符.Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的S

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

1. What Is a Socket?(什么是套接字) A socket is an abstraction through which an application may send and receive data, in muchthe same way as an open-file handle allows an application to read and write data to stablestorage. 简单来说,套接字就是网络数据传输用的软件设备. 举个生活中的例子

TCP/IP编程学习01

网络编程就是编写使多台计算机联网交互数据.操作系统会提供名为socket(套接字)的部件,socket是网络数据传输的设备软件,所以说网络编程又可以成为socket编程. 在此借用书中打电话例子,对socket的使用做简单描述: 1)首先要有一个电话,新建电话就相当于创建一个电话socket. int socket(int domain, int type, int protocol); 2)给电话分配号码,绑定IP地址和端口号. int bind(int sockfd, struct sock

如何才能算得上熟悉TCP/IP编程?(转知乎)

1. 作者:匿名用户链接:https://www.zhihu.com/question/20795067/answer/16259037 能进行网络编程 1.如果你说你会select,epoll,iocp模型,那会让对方觉得更靠谱2.如果你说出你做过im,下载之类那会让对方来兴趣.3.如果你说设计了通讯协议,会让对方觉得更贴切4.如果你说做过,熟悉, ftp http snmp smtp 这些简单的老古董协议,会加分,但不大.5.如果你说熟悉bt,emule,udt等协议,那会对你很有好感.6.

Linux下的TCP/IP编程----进程及多进程服务端

在之前的学习中我们的服务端同一时间只能为一个客户端提供服务,即使是将accept()函数包含在循环中,也只能是为多个客户端依次提供服务,并没有并发服务的能力,这显然是不合理的.通过多进程的使用,我们可以很便捷的实现服务端的多进程,这样就可以同时为多个客户端提供服务. 首先我们要理解程序,进程,进程ID,僵尸进程,线程的概念. 程序:广泛的说就是为了达到某一目的二规定的途径,在编程中具体的就是为了实现某一功能而编写的代码实体,是静态的. 进程:程序的一次动态执行就是一个进程,它是占用了一定内存空间

【python】TCP/IP编程

No1: [TCP] 客户端 import socket s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect(('www.sina.com.cn',80)) s.send(b'GET / HTTP/1.1\r\nHost: www.sina.com.cn\r\nConnection:close\r\n\r\n') buffer=[] while True: d=s.recv(1024) if d: buffer.append(

第一次课:简单的TCP/IP编程实例

第一步:创建服务器端程序 1.程序结构 2.程序代码 package cn.shxy.net; import java.io.IOException; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket; public class TCPServer { //主函数 public static void main(String[] args) throws IOException{ ne

基于 TCP/IP 协议的网络编程

在说明基于 TCP/IP 协议的网络编程之前,先来了解一下 Socket(网络套接字): 利用套接字(Socket)开发网络应用程序早已被广泛的采用,以至于成为事实上的标准 通信的两端都要有 Socket,是两台机器间通信的端点(API 原话) 网络通信其实就是 Socket 间的通信 Socket 允许程序把网络连接当成一个流,数据在两个 Socket 间通过 IO 传输 一般主动发起通信的应用程序属客户端,等待通信请求的为服务端 网络编程某种程度上可以称作"Socket 编程" T

TCP/IP的经典网络编程

                                                                         TCP/IP网络编程之四书五经                                                                                                                             孟岩 TCP/IP协议是眼下广域网和局域网通用的网络协议.因此.基于TCP