当前位置: 首页 > 编程日记 > 正文

socket 服务器浏览器与服务器客户端实例

一、服务器与浏览器

// 取得本机的loopback网络地址,即127.0.0.1
            IPAddress address = IPAddress.Loopback;
            IPEndPoint endPoint = new IPEndPoint(address, 49152);
            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            socket.Bind(endPoint);
            socket.Listen(10);
            Console.WriteLine("开始监听,端口号;{0}.", endPoint.Port);
            while (true)
            {
                Socket client = socket.Accept();
                Console.WriteLine(client.RemoteEndPoint);
                byte[] buffer = new byte[4096];
                int length = client.Receive(buffer, 4096, SocketFlags.None);
                System.Text.Encoding utf8 = System.Text.Encoding.UTF8;
                string requestString = utf8.GetString(buffer, 0, length);
                Console.WriteLine(requestString);
                string statusLine = "HTTP/1.1 200 OK\r\n";
                byte[] statusLineBytes = utf8.GetBytes(statusLine);
                string responseBody = "<html><head><title>From Socket Server</title></head><body><hl>Hello,world.</hl></body></html>";
                byte[] responseBodyBytes = utf8.GetBytes(responseBody);
                // 回应的头部
                string responseHeader = string.Format("Content-Type:text/html;charset=UTF-8\r\nContent-Length:{0}\r\n",
                    responseBody.Length);
                byte[] responseHeaderBytes = utf8.GetBytes(responseHeader);
                // 向客户端发送状态消息
                client.Send(statusLineBytes);
                // 向客户端发送回应头
                client.Send(responseHeaderBytes);
                client.Send(new byte[] { 13, 10 });
                client.Send(responseBodyBytes);
                client.Close();
                if (Console.KeyAvailable)
                {
                    break;
                }
                socket.Close();
            }

最后在浏览器地址栏中输入:http://localhost:49152

二、服务器客户端

服务端:

class Program{private static byte[] result = new byte[1024];private static int myProt = 8885;   //端口static Socket serverSocket;static void Main(string[] args){//服务器IP地址IPAddress ip = IPAddress.Parse("127.0.0.1");serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);serverSocket.Bind(new IPEndPoint(ip, myProt));  //绑定IP地址:端口serverSocket.Listen(10);    //设定最多10个排队连接请求Console.WriteLine("启动监听{0}成功", serverSocket.LocalEndPoint.ToString());//通过Clientsoket发送数据Thread myThread = new Thread(ListenClientConnect);myThread.Start();Console.ReadLine();}/// <summary>/// 监听客户端连接/// </summary>private static void ListenClientConnect(){while (true){Socket clientSocket = serverSocket.Accept();clientSocket.Send(Encoding.ASCII.GetBytes("Server Say Hello"));Thread receiveThread = new Thread(ReceiveMessage);receiveThread.Start(clientSocket);}}/// <summary>/// 接收消息/// </summary>/// <param name="clientSocket"></param>private static void ReceiveMessage(object clientSocket){Socket myClientSocket = (Socket)clientSocket;while (true){try{//通过clientSocket接收数据int receiveNumber = myClientSocket.Receive(result);Console.WriteLine("接收客户端{0}消息{1}", myClientSocket.RemoteEndPoint.ToString(), Encoding.ASCII.GetString(result, 0, receiveNumber));}catch(Exception ex){Console.WriteLine(ex.Message);myClientSocket.Shutdown(SocketShutdown.Both);myClientSocket.Close();break;}}}}

客户端:

class Program{private static byte[] result = new byte[1024];static void Main(string[] args){//设定服务器IP地址IPAddress ip = IPAddress.Parse("127.0.0.1");Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);try{clientSocket.Connect(new IPEndPoint(ip, 8885)); //配置服务器IP与端口Console.WriteLine("连接服务器成功");}catch{Console.WriteLine("连接服务器失败,请按回车键退出!");return;}//通过clientSocket接收数据int receiveLength = clientSocket.Receive(result);Console.WriteLine("接收服务器消息:{0}",Encoding.ASCII.GetString(result,0,receiveLength));//通过 clientSocket 发送数据for (int i = 0; i < 10; i++){try{Thread.Sleep(1000);    //等待1秒钟string sendMessage = "client send Message Hellp" + DateTime.Now;clientSocket.Send(Encoding.ASCII.GetBytes(sendMessage));Console.WriteLine("向服务器发送消息:{0}" + sendMessage);}catch{clientSocket.Shutdown(SocketShutdown.Both);clientSocket.Close();break;}}Console.WriteLine("发送完毕,按回车键退出");Console.ReadLine();}}

转载于:https://www.cnblogs.com/honghong75042/archive/2013/05/11/3072377.html

相关文章:

匹配3位或4位区号的电话号码,其中区号可以用小括号括起来,也可以不用,区号与本地号间可以用连字号或空格间隔,也可以没有间隔...

public bool IsPhone(string input){string pattern "^\\(0\\d{2}\\)[- ]?\\d{8}$|^0\\d{2}[- ]?\\d{8}$|^\\(0\\d{3}\\)[- ]?\\d{7}$|^0\\d{3}[- ]?\\d{7}$";Regex regex new Regex(pattern);return regex.IsMatch(input);} 转载于:https://www.cnblogs.com/…

Mac MySQL配置环境变量的两种方法

第一种&#xff1a; 1.打开终端,输入&#xff1a; cd ~ 会进入~文件夹 2.然后输入&#xff1a;touch .bash_profile 回车执行后&#xff0c; 3.再输入&#xff1a;open -e .bash_profile 会在TextEdit中打开这个文件&#xff08;如果以前没有配置过环境变量&#xff0c;那么这…

linux之x86裁剪移植---字符界面sdl开发入门

linux下有没有TurboC2.0那样的画点、线、圆的图形函数库&#xff0c;有没有grapihcs.h&#xff0c;或者与之相对应或相似的函数库是什么&#xff1f;有没有DirectX这样的游戏开发库&#xff1f;SDL就是其中之一。SDL&#xff08;Simple DirectMedia Layer&#xff09;是一个夸平…

iOS 视频捕获系列Swift之AVFoundation(一)

iOS 视频捕获系列之AVFoundation(一) AVCaptureMovieFileOutput系列 在iOS开发过程中&#xff0c;或多或少的都涉及视频的操作。 尤其在去年直播行业的带动下&#xff0c;移动端对视频的处理也愈来愈发要求严格。 本文也是在 这篇 中参考而来。 Swift 版本哦&#xff01; 本文 …

C#做外挂常用API

using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; //这个肯定要的 namespace WindowsApplication1 {class win32API{public const int OPEN_PROCESS_ALL 2035711;public const int PAGE_READWRITE 4;public con…

phpinfo 信息利用

0x01 基础信息 1.system info:提供详细的操作系统信息&#xff0c;为提权做准备。 2.extension_dir:php扩展的路径 3.$_SERVER[‘HTTP_HOST’]:网站真实IP、CDN什么的都不存在的&#xff0c;找到真实ip&#xff0c;扫一扫旁站&#xff0c;没准就拿下几个站。 4.$_SERVER[‘…

iOS三种录制视频方式详细对比

先附上参考资料 http://www.jianshu.com/p/16cb14f53933 https://developer.apple.com/library/content/samplecode/AVSimpleEditoriOS/Introduction/Intro.html https://github.com/objcio/VideoCaptureDemo https://github.com/gsixxxx/DTSmallVideo https://github.com/Andy…

C# 实现Oracle中的数据与Excel之间的转换

最近项目要求实现数据库之间数据在各个数据库之间导入导出&#xff0c;在此做个笔记 1. 将Oracle中的表导入到Excel中&#xff0c;反之亦然 private static readonly string connectionString ConfigurationManager.ConnectionStrings["OracleConnection"].Connecti…

【转】Word2007中不连续页码设置 多种页码设置

【转】Word2007中不连续页码设置 多种页码设置 页码是论文必不可少的部分。我们看一下如何添加页码&#xff0c;并且针对一些特殊的格式要求怎么应对&#xff1a; 如果是【毕业论文】有多种混合页码&#xff0c;有Ⅰ、Ⅱ、Ⅲ。。。还有1、2、3 。。。请直接看【第二种方法】。 …

vim编辑器异常退出产生备份文件

当非正常关闭vim编辑器时&#xff08;比如直接关闭终端或者电脑断电&#xff09;&#xff0c;会生成一个.swp文件&#xff0c;这个文件是一个临时交换文件&#xff0c;用来备份缓冲区中的内容。 需要注意的是如果你并没有对文件进行修改&#xff0c;而只是读取文件&#xff0c…

从0到1思考与实现iOS-Widget

讲述之前首先看下demo效果图&#xff1a; 基本的展开收起、本App本体交互然后再展示几个效果不错的 Widget app 毒物 && KeepESPNPCalcMusixmatchFantastical 2Carrot Weatherdemo 地址在此&#xff01;欢迎star 比心一、Widget总览 Widget 是 iOS8 推出第一版&…

Android Studio 初体验

Google在I/O2013大会上发布了Android新的开发工具Android Studio&#xff0c;趁周末时间做了一下尝试。有需要的可以在http://developer.android.com/sdk/installing/studio.html下载&#xff0c;当前版本是V0.1。官方解释&#xff1a;Android Studio is anew Android developm…

JAVA面试题(2)

1 String 与 new 的不同 使用“”赋值不一定每次都创建一个新的字符串&#xff0c;而是从“字符串实例池”中查找字符串。使用“new”进行赋值&#xff0c;则每次都创建一个新的字符串。 2 String与StringBuffer String类是不可变类&#xff0c;字符串一旦初始化后&#xff0c…

限制HTTP数据包发送Referer

一般点击一个A标签的时候都会发送 Referer 什么是 Referer&#xff1f; 就是你点击A标签 Referer的信息告诉服务端你从哪里点击出来的 可在HTML上加 <meta name"referrer" content"no-referrer">这样就不发送Referer头了

TCP/IP详解学习笔记(3)-IP协议,ARP协议,RARP协议

把这三个协议放到一起学习是因为这三个协议处于同一层&#xff0c;ARP协议用来找到目标主机的Ethernet网卡Mac地址&#xff0c;IP则承载要发送的消息。数据链路层可以从ARP得到数据的传送信息&#xff0c;而从IP得到要传输的数据信息。 1.IP协议 IP协议是TCP/IP协议的核心&…

数据结构与算法分析(C++版)(第二版)

查看书籍详细信息&#xff1a; 数据结构与算法分析&#xff08;C版&#xff09;&#xff08;第二版&#xff09; 内容简介 本书采用程序员最爱用的面向对象C语言来描述数据结构和算法&#xff0c;并把数据结构原理和算法分析技术有机地结合在一起&#xff0c;系统介绍了各种…

nginx反向代理原理讲解

一 、概述 反向代理&#xff08;Reverse Proxy&#xff09;方式是指以代理服务器来接受Internet上的连接请求&#xff0c;然后将请求转发给内部网络上的服务器&#xff1b;并将从服务器上得到的结果返回给Internet上请求连接的客户端&#xff0c;此时代理服务…

cojs 简单的数位DP 题解报告

首先这道题真的是个数位DP 我们考虑所有的限制&#xff1a; 首先第六个限制和第二个限制是重复的&#xff0c;保留第二个限制即可 第五个限制在转移中可以判断&#xff0c;不用放在状态里 对于第一个限制&#xff0c;我们可以增加一维表示余数即可 对于第四个限制也是同理 对于…

iOS ERROR ITMS - 打包上传报错整理

作者 Silence_广 关注 2017.03.24 11:12 字数 706 阅读 45评论 1喜欢 12ERROR ITMS-90034 ERROR ITMS-90034这个问题就是你的包里面的证书和开发者中心的证书不一样所以提交的时候回报错. 如果试过网上很多的解决方法之后&#xff08;诸如重新制作证书&#xff0c;删调过期证书…

照片墙瀑布流加载与阻止加载

网上大部分主流的瀑布流应用基本都是由后端在提供图片地址的同时提供图片宽高&#xff0c;这样&#xff0c;前端不必等待图片渲染完成&#xff0c;可以根据图片的宽高先把装载图片的容器或父节点先放上页面&#xff0c;完成基础性的布局&#xff0c;再让图片以渐变或其他方式逐…

利用Nginx实现简易负载均衡

基本思路如下&#xff1a; 比如我们有三个服务器&#xff1a; 其中: 130.251是反向代理转发服务器 130.251和130.238分别是负载服务器 Mysql服务器没有标出来, 为方便区分,我们先把1号负载的首页写成111111111 2号负载的首页写成222222 然后我们现在控制130.251, 把nginx配置文…

两行代码搞定iOS自定义HUD风格动画弹窗(支持选择记录) - SKChoosePopView的使用和实现思路

作者 ShevaKuilin 关注 2017.03.25 18:28* 字数 2014 阅读 270评论 0喜欢 23さらい屋五葉原文地址----> MyBlog HUD风格的选项弹窗是我们在日常开发中经常会碰到的一类需求&#xff0c;通常因为项目周期等因素&#xff0c;很少会专门抽出时间来对此类弹窗进行专门的定制开发…

yii2框架随笔29

今天我们来看UrlRule.php <?php /*** link http://www.yiiframework.com/* copyright Copyright (c) 2008 Yii Software LLC* license http://www.yiiframework.com/license/*/ namespace yii\web; use Yii; use yii\base\Object; use yii\base\InvalidConfigException; /*…

八种简易健康减肥瘦身法

①原地跑&#xff0c;紧实大腿肌肉&#xff1b;②上楼梯&#xff0c;瘦小腿、大腿、臀&#xff1b;③步行&#xff0c;瘦腿、腰&#xff1b;④瑜珈&#xff0c;瘦全身&#xff1b;⑤跳舞&#xff0c;瘦全身&#xff1b;⑥跳绳&#xff0c;瘦大腿、小腿&#xff1b;⑦晨操&#…

LaZagne检测windows本地存储的密码

LaZagne项目是用于检索存储在本地计算机上的大量密码的开源应用程序。 每个软件使用不同的技术&#xff08;明文&#xff0c;API&#xff0c;自定义算法&#xff0c;数据库等&#xff09;存储其密码。 该工具的开发是为了找到最常用的软件的密码。 下载到windows机器&#xff0…

通知提示SCPromptView

作者 陈小翰 关注 2017.03.24 18:01 字数 138 阅读 62评论 0喜欢 1SCPromptView SCPromptView : 显示在顶部的提示控件 你的star是我最大的动力 effect.gif安装 手动安装 下载源码&#xff0c;将SCPromptView文件夹拖进项目 CocoaPod pod SCPromptView 使用 SCPromptView 的用…

4566: [Haoi2016]找相同字符 SAM

折腾了好久。不过收获还是很多的。第一次自己去画SAM所建出来fail树。深入体会了这棵树的神奇性质。 当然&#xff0c;我最终靠着自己A掉了。&#xff08;这是我第一次推SAM的性质&#xff08;以前都是抄别人的&#xff0c;感觉自己好可耻&#xff09;&#xff0c;不过感觉好像…

NYOJ-232 How to eat more Banana

How to eat more Banana 时间限制&#xff1a;1000 ms | 内存限制&#xff1a;65535 KB难度&#xff1a;4描述A group of researchers are designing an experiment to test the IQ of a monkey. They will hang a banana at the roof of a building, and at the mean time, …

UIView Animation

作者 嘿o大远 关注 2017.03.23 17:02* 字数 402 阅读 47评论 1喜欢 3今天总结一下UIView动画就是 UiView动画是基于高层API封装进行封装的,对UIView的属性进行修改时候所产生的动画. 基本动画 下面两种方法是最常用的两种. (void)animateWithDuration:(NSTimeInterval)duratio…