热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

socket学习(转载)

原文:http:www.cnblogs.comlicongjiearchive20061026540640.html服务器端代码:Code1usingS

原文:http://www.cnblogs.com/licongjie/archive/2006/10/26/540640.html
服务器端代码:

ContractedBlock.gifExpandedBlockStart.gifCode
  1using System;
  2using System.Collections.Generic;
  3using System.ComponentModel;
  4using System.Data;
  5using System.Drawing;
  6using System.Linq;
  7using System.Text;
  8using System.Windows.Forms;
  9using System.Net;
 10using System.Net.Sockets;
 11using System.Threading;
 12
 13namespace Server
 14ExpandedBlockStart.gifContractedBlock.gif{
 15    public partial class Form1 : Form
 16ExpandedSubBlockStart.gifContractedSubBlock.gif    {
 17        public Form1()
 18ExpandedSubBlockStart.gifContractedSubBlock.gif        {
 19            InitializeComponent();
 20        }

 21
 22        Thread serverThread;
 23        Thread clientThread;
 24        Socket serverSocket;
 25        Socket clientSocket;
 26
 27        public void ServerStart()
 28ExpandedSubBlockStart.gifContractedSubBlock.gif        {
 29            IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 6009);
 30            serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
 31
 32            serverSocket.Bind(ipep);
 33
 34            serverSocket.Listen(10);
 35
 36            while (true)
 37ExpandedSubBlockStart.gifContractedSubBlock.gif            {
 38                try
 39ExpandedSubBlockStart.gifContractedSubBlock.gif                {
 40                    clientSocket = serverSocket.Accept();
 41                    clientThread = new Thread(new ThreadStart(ReceiveData));
 42                    clientThread.Start();
 43                }

 44                catch (Exception ex)
 45ExpandedSubBlockStart.gifContractedSubBlock.gif                {
 46                    MessageBox.Show("listening Error:" + ex.Message);
 47                }

 48            }

 49        }

 50
 51        private void ReceiveData()
 52ExpandedSubBlockStart.gifContractedSubBlock.gif        {
 53            bool keepalive = true;
 54
 55            Socket s = clientSocket;
 56
 57            Byte[] buffer = new Byte[1024];
 58
 59            //根据接收到得客户端套接字,向客户端发送信息
 60
 61            IPEndPoint clientep = (IPEndPoint)s.RemoteEndPoint;
 62            lstServer.Items.Add("Client:" + clientep.Address + "(" + clientep.Port + ")");
 63
 64            string welcome = "welcome to here ";
 65
 66            byte[] data = new byte[1024];
 67
 68            data = Encoding.ASCII.GetBytes(welcome);
 69
 70            s.Send(data, data.Length, SocketFlags.None);
 71
 72            while (keepalive)
 73ExpandedSubBlockStart.gifContractedSubBlock.gif            {
 74                int bufLen = 0;
 75
 76                try
 77ExpandedSubBlockStart.gifContractedSubBlock.gif                {
 78                    bufLen = s.Available;
 79
 80                 
 81
 82                    s.Receive(buffer, 0, bufLen, SocketFlags.None);
 83
 84                    if (bufLen == 0)
 85                        continue;
 86                }

 87                catch (Exception ex)
 88ExpandedSubBlockStart.gifContractedSubBlock.gif                {
 89                    MessageBox.Show("Receive Error:" + ex.Message);
 90
 91                    return;
 92                }

 93
 94                clientep = (IPEndPoint)s.RemoteEndPoint;
 95
 96                string clientcommand = System.Text.Encoding.ASCII.GetString(buffer).Substring(0, bufLen);
 97
 98
 99                lstServer.Items.Add(clientcommand + "(" + clientep.Address + ":" + clientep.Port + ")");
100
101
102                string today = "today";
103                byte[] data2 = new byte[1024];
104                data2 = Encoding.ASCII.GetBytes(today);
105
106                s.Send(data2, data2.Length, SocketFlags.None);
107                   
108            }

109
110
111        }

112
113        private void btnOpen_Click(object sender, EventArgs e)
114ExpandedSubBlockStart.gifContractedSubBlock.gif        {
115            serverThread = new Thread(new ThreadStart(ServerStart));
116            serverThread.Start();
117
118            lstServer.Items.Add("Server Start .");
119        }

120    }

121}

122
客户端代码:
ContractedBlock.gifExpandedBlockStart.gifCode
 1using System;
 2using System.Collections.Generic;
 3using System.ComponentModel;
 4using System.Data;
 5using System.Drawing;
 6using System.Linq;
 7using System.Text;
 8using System.Windows.Forms;
 9using System.Net;
10using System.Net.Sockets;
11using System.Threading;
12
13namespace Client
14ExpandedBlockStart.gifContractedBlock.gif{
15    public partial class Form1 : Form
16ExpandedSubBlockStart.gifContractedSubBlock.gif    {
17        Socket clientSocket;
18        Thread clientThread;
19        
20        public Form1()
21ExpandedSubBlockStart.gifContractedSubBlock.gif        {
22            InitializeComponent();
23        }

24
25
26        private void ConnectToServer()
27ExpandedSubBlockStart.gifContractedSubBlock.gif        {
28            byte[] data = new byte[1024];
29
30            IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 6009);
31
32            clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
33
34            try
35ExpandedSubBlockStart.gifContractedSubBlock.gif            {
36                clientSocket.Connect(ipep);
37            }

38            catch (SocketException ex)
39ExpandedSubBlockStart.gifContractedSubBlock.gif            {
40                MessageBox.Show("connect error:" + ex.Message);
41                return;
42            }

43
44            while (true)
45ExpandedSubBlockStart.gifContractedSubBlock.gif            {
46                int bufLen = 0;
47
48                try
49ExpandedSubBlockStart.gifContractedSubBlock.gif                {
50                    bufLen = clientSocket.Available;
51                    clientSocket.Receive(data, 0, bufLen, SocketFlags.None);
52
53                    if (bufLen == 0)
54ExpandedSubBlockStart.gifContractedSubBlock.gif                    {
55                        continue;
56                    }

57                }

58                catch (Exception ex)
59ExpandedSubBlockStart.gifContractedSubBlock.gif                {
60                    MessageBox.Show("Receive Error:" + ex.Message);
61                    return;
62                }

63
64                string clientcommand = System.Text.Encoding.ASCII.GetString(data).Substring(0, bufLen);
65
66                lstClient.Items.Add(clientcommand);
67            }

68        }

69
70        private void button1_Click(object sender, EventArgs e)
71ExpandedSubBlockStart.gifContractedSubBlock.gif        {
72            clientThread = new Thread(new ThreadStart(ConnectToServer));
73            clientThread.Start();
74        }

75
76        private void btnSend_Click(object sender, EventArgs e)
77ExpandedSubBlockStart.gifContractedSubBlock.gif        {
78            byte[] data = new byte[1024];
79
80            data = Encoding.ASCII.GetBytes(txtClient.Text);
81
82            clientSocket.Send(data, data.Length, SocketFlags.None);
83        }

84    }

85}

86

代码下载:/Files/wenjie/socketsample.rar

转:https://www.cnblogs.com/wenjie/archive/2009/08/26/1554606.html



推荐阅读
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • 本文介绍了使用数据库管理员用户执行onstat -l命令来监控GBase8s数据库的物理日志和逻辑日志的使用情况,并强调了对已使用的逻辑日志是否及时备份的重要性。同时提供了监控方法和注意事项。 ... [详细]
  • POCOCLibraies属于功能广泛、轻量级别的开源框架库,它拥有媲美Boost库的功能以及较小的体积广泛应用在物联网平台、工业自动化等领域。POCOCLibrai ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
  • 【重识云原生】第四章云网络4.8.3.2节——Open vSwitch工作原理详解
    2OpenvSwitch架构2.1OVS整体架构ovs-vswitchd:守护程序,实现交换功能,和Linux内核兼容模块一起,实现基于流的交换flow-basedswitchin ... [详细]
  • ejava,刘聪dejava
    本文目录一览:1、什么是Java?2、java ... [详细]
  • 流数据流和IO流的使用及应用
    本文介绍了流数据流和IO流的基本概念和用法,包括输入流、输出流、字节流、字符流、缓冲区等。同时还介绍了异常处理和常用的流类,如FileReader、FileWriter、FileInputStream、FileOutputStream、OutputStreamWriter、InputStreamReader、BufferedReader、BufferedWriter等。此外,还介绍了系统流和标准流的使用。 ... [详细]
author-avatar
熊字饼爱优乐美
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有