Server端:

using System;

using System.Collections.Generic;

using System.Text;

using System.Net;

using System.Net.Sockets;

namespace Server

{

class Program

{

static void Main(string[] args)

{

//用于表示客户端发送的信息的长度

int recvLenth;

//用于缓存客户端所发送的信息,通过socket传递的信息必须为字节数组

byte[] data=new byte[1024];

//本机预使用的IP和端口

IPEndPoint iend = new IPEndPoint(IPAddress.Any,9999);

Socket newsock = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);

newsock.Bind(iend);

newsock.Listen(10);

Console.WriteLine("waiting for a client !");

Socket client = newsock.Accept();

//当有可用的客户端连接尝试时执行,并返回一个新的socket,用于与客户端之间的通信

IPEndPoint clientAdd = (IPEndPoint)client.RemoteEndPoint;//获取远程终结点

Console.WriteLine("连接:"+clientAdd.Address+"端口:"+clientAdd.Port);//获取或设置终结点端口号

string welcome = "welcome here !";

data = Encoding.ASCII.GetBytes(welcome);

client.Send(data,data.Length,SocketFlags.None);//指定套接字的发送和接收行为

while(true)

{

data=new byte[1024];

recvLenth = client.Receive(data);

if(recvLenth==0)//信息长度为0,说明客户端连接断开

{

break;

}

Console.WriteLine(Encoding.ASCII.GetString(data,0,recvLenth));

client.Send(data,recvLenth,SocketFlags.None);

}

Console.WriteLine("断开连接"+clientAdd.Address);

client.Close();

newsock.Close();

}

}

}

Client端:

using System;

using System.Collections.Generic;

using System.Text;

using System.Net.Sockets;

using System.Net;

namespace Client

{

class Program

{

static void Main(string[] args)

{

byte[] data=new byte[1024];

Socket newclient = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);

Console.WriteLine("输入服务器地址:");

string ipadd = Console.ReadLine();

Console.WriteLine();

Console.Write("输入服务器端口:");

int port = Convert.ToInt32(Console.ReadLine());

IPEndPoint ie = new IPEndPoint(IPAddress.Parse(ipadd),port);//服务器的ip和端口

try

{

//因为客户端只是用来向特定的服务器发送信息,所以不需要绑定本机的ip和端口,也不需要监听

newclient.Connect(ie);

}

catch(SocketException ex)

{

Console.WriteLine("不能连接");

Console.WriteLine(ex.ToString());

return;

}

int recv = newclient.Receive(data);

string stringdata = Encoding.ASCII.GetString(data,0,recv);

Console.WriteLine(stringdata);

while(true)

{

string input = Console.ReadLine();

if(input=="exit")

{

break;

}

newclient.Send(Encoding.Default.GetBytes(input));

data=new byte[1024];

recv = newclient.Receive(data);

stringdata = Encoding.Default.GetString(data,0,recv);

Console.WriteLine(stringdata);

}

Console.WriteLine("断开连接");

newclient.Shutdown(SocketShutdown.Both);

newclient.Close();

}

}

}

C-Sharp网络编程案例解析(Socket类的使用)的更多相关文章

  1. Socket网络编程(TCP/IP/端口/类)和实例

    Socket网络编程(TCP/IP/端口/类)和实例 原文:C# Socket网络编程精华篇 转自:微冷的雨 我们在讲解Socket编程前,先看几个和Socket编程紧密相关的概念: TCP/IP层次 ...

  2. Java 学习之网络编程案例

    网络编程案例 一,概念 1,网络编程不等于网站编程 2,编程只和传输层打交道,即TCP和UDP两个协议 二,案例 1,TCP实现点对点的聊天 Server端:两个输入流:读客户端和控制台,一个输出端: ...

  3. 从零开始学Python第八周:网络编程基础(socket)

    Socket网络编程 一,Socket编程 (1)Socket方法介绍 Socket是网络编程的一个抽象概念.通常我们用一个Socket表示"打开了一个网络链接",而打开一个Soc ...

  4. C#网络编程技术微软Socket实战项目演练(三)

    一.课程介绍 本次分享课程属于<C#高级编程实战技能开发宝典课程系列>中的第三部分,阿笨后续会计划将实际项目中的一些比较实用的关于C#高级编程的技巧分享出来给大家进行学习,不断的收集.整理 ...

  5. Java网络编程案例---聊天室

    网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来. java.net包中JavaSE的API包含有类和接口,它们提供低层次的通信细节.你可以直接使用这些类和接口,来专注于解决 ...

  6. Linux 网络编程二(Socket创建)

    TCP通信 一个程序使用套接字需要执行4个步骤. --分配套接口和初始化 --连接 --发送或接收数据 --关闭套接字 涉及到的调用包括socket.bind.listen.connect(阻塞线程) ...

  7. Android网络编程系列 一 Socket抽象层

     在<Android网络编程>系列文章中,前面已经将Java的通信底层大致的描述了,在我们了解了TCP/IP通信族架构及其原理,接下来我们就开始来了解基于tcp/ip协议层的Socket抽 ...

  8. 网络编程初识和socket套接字

    网络的产生 不同机器上的程序要通信,才产生了网络:凡是涉及到倆个程序之间通讯的都需要用到网络 软件开发架构 软件开发架构的类型:应用类.web类 应用类:qq.微信.网盘.优酷这一类是属于需要安装的桌 ...

  9. Java网络编程二:Socket详解

    Socket又称套接字,是连接运行在网络上两个程序间的双向通讯的端点. 一.使用Socket进行网络通信的过程 服务端:服务器程序将一个套接字绑定到一个特定的端口,并通过此套接字等待和监听客户端的连接 ...

随机推荐

  1. 母亲的牛奶(milk)

    母亲的牛奶(milk) 题目描述 农民约翰有三个容量分别是A.B.C升的桶,A.B.C分别是三个从1到20的整数,最初,A和B桶都是空的,而C桶是装满牛奶的.有时,约翰把牛奶从一个桶倒到另一个桶中,直 ...

  2. hrbustoj 1125 循环小数 II(小数变分数+极限思想)

    #include<stdio.h> #include<string.h> #include<algorithm> #include<math.h> #i ...

  3. 近期用过的Linux口令备份

    最近使用Ubuntu用到的一些口令: rm -rf directory 移除文件夹或者文件touch (create file)mkdirmv(move,rename)chown (change ow ...

  4. 发布时去掉 debug 和 提醒日志,简单无侵入

    在 proguard 文件中加入下面代码,让发布时去掉 debug 和 提醒日志,简单无侵入! -assumenosideeffects class android.util.Log { public ...

  5. Chapter 1 First Sight——3

    Flying doesn't bother me; the hour in the car with Charlie, though, I was a little worried about. 坐飞 ...

  6. 继续几道经典的js题(局部和全局变量,对象等)

    1. //现有代码如下:var foo = 1;function main(){alert(foo);var foo = 2;alert(this.foo)this.foo = 3;}//1.请给出以 ...

  7. 自动化运维工具Ansible详细部署

    本文来源:http://sofar.blog.51cto.com/353572/1579894/ 前言 一个由 Python 编写的强大的配置管理解决方案.尽管市面上已经有很多可供选择的配置管理解决方 ...

  8. Counting Intersections

    Counting Intersections Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/ ...

  9. dom操作js

    1.getElementById()//ie8下不区分大小写 getElementsByName()//name属性相比于Id可以不唯一,且其只在表单.表单元素.img .iframe中有用,返回一个 ...

  10. hibernate--一对多 多对一 双向关联 (重点!!!)

    一方 group: package com.bjsxt.hibernate; import java.util.HashSet; import java.util.Set; import javax. ...