C-Sharp网络编程案例解析(Socket类的使用)

摘要:
服务器端:usingSystem;使用System.Collections。通用的使用系统。文本使用系统。网使用System.Net。插座;namespaceServer{classProgram{staticvoidMain(string〔〕args){//

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类的使用)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Mysql源码学习——打造专属语法node——将用户提交的数据写入data.json文件下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

每个Web开发者都应该知道的关于URL编码的知识

  本文首先阐述了人们关于统一资源定位符(URL)编码的普遍的误读,其后通过阐明HTTP场景下的URL encoding 来引出我们经常遇到的问题及其解决方案。本文并不特定于某类编程语言,我们在Java环境下阐释问题,最后从Web应用的多个层次描述如何解决URL编码的问题来结尾。    简介   当我们每天上网冲浪时,有一些技术我们无时无刻不在面对。有数据...

Kafka消费者-从Kafka读取数据

(1)Customer和Customer Group (1)两种常用的消息模型 队列模型(queuing)和发布-订阅模型(publish-subscribe)。 队列的处理方式是一组消费者从服务器读取消息,一条消息只由其中的一个消费者来处理。 发布-订阅模型中,消息被广播给所有的消费者,接收到消息的消费者都可以处理此消息。 (2)Kafka的消费者和消...

网页实时聊天之PHP实现websocket

前言 websocket 作为 HTML5 里一个新的特性一直很受人关注,因为它真的非常酷,打破了 http “请求-响应”的常规思维,实现了服务器向客户端主动推送消息,本文介绍如何使用 PHP 和 JS 应用 websocket 实现一个网页实时聊天室; 以前写过一篇文章讲述如何使用ajax长轮询实现网页实时聊天,见链接: 网页实时聊天之js和jQuer...

.Net程序员学用Oracle系列(9):系统函数(上)

1、字符函数 1.1、字符函数简介 1.2、语法说明及案例 2、数字函数 2.1、数字函数简介 2.2、语法说明及案例 3、日期函数 3.1、日期函数简介 3.2、语法说明及案例 3.3、日期函数补充 4、总结 Oracle 中系统函数特别多,有好几百个,其中大部分函数对开发者而言,似乎永远都用不到,本文将要介绍 Ora...

JAVA实现AD验证

package service;import java.util.Hashtable; import javax.naming.Context; import javax.naming.NamingException; import javax.naming.directory.DirContext; import javax.naming.directo...

在oracle中 将一个以逗号隔开的String字符串转换成以单引号逗号隔开的集合

在oracle中,使用一条语句实现将'1,2,3'拆分成'1','2','3'的集合将一个以逗号隔开的String字符串转换成以单引号逗号隔开的集合select regexp_substr('1,2,3','[^,]+', 1, level) as para_code1 from dualconnect by regexp_substr('1,2,3','...