服务器端

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
using System.Threading; namespace DMServer
{
public partial class Form1 : Form
{
Thread TempThread;
Socket server; string labelText = string.Empty; public string LabelText
{
get { return labelText; }
set
{
labelText = value;
}
} public static ManualResetEvent allDone = new ManualResetEvent(false); bool isDo = false; public Form1()
{
InitializeComponent();
} private void Form1_Load(object sender, EventArgs e)
{ } /// <summary>
/// 用这个方法,另一个经测试是不好使的
/// </summary>
public void StartReceive()
{
server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
bool isGo = true;
server.Bind(new IPEndPoint(IPAddress.Parse("192.168.10.128"), )); //这里要写客户端访问的地址
server.Listen();
Box box = new Box();
while (isGo)
{
try
{
Socket s = server.Accept();
string content = string.Empty;
byte[] bs = new byte[s.Available]; int num = s.Receive(bs); content += Encoding.ASCII.GetString(bs); s.Send(Encoding.ASCII.GetBytes("ok"));
if (content.Equals("ABCD123"))
{
isGo = false;
}
}
catch (Exception ex)
{ } } server.Close();
} /// <summary>
/// 不好使
/// </summary>
public void StartReceive1()
{
server.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), ));
server.Listen();
Box box = new Box();
box.WorkSocket = server;
while (true)
{
allDone.Reset();
server.BeginAccept(new AsyncCallback(ConnClient), box);
allDone.WaitOne();
}
} public void ConnClient(IAsyncResult ar)
{
Socket socket = ((Box)ar.AsyncState).WorkSocket;
Socket client = socket.EndAccept(ar); Box box = new Box();
box.WorkSocket = client; client.BeginReceive(box.Bytes, , box.Bytes.Length, SocketFlags.None, new AsyncCallback(Receive), box);
} public void Receive(IAsyncResult ar)
{
string content = string.Empty; Box box = (Box)ar.AsyncState; Socket handler = box.WorkSocket; int byteread = handler.EndReceive(ar); if (byteread > )
{
box.Bulider.Append(Encoding.ASCII.GetString(box.Bytes, , byteread)); content = box.Bulider.ToString(); if (content.IndexOf("") > -)
{
Send(handler, "ok");
}
else
{
handler.BeginReceive(box.Bytes, , box.Bytes.Length, SocketFlags.None, new AsyncCallback(Receive), box);
}
}
} private static void Send(Socket handler, String data)
{
// 消息格式转换.
byte[] byteData = Encoding.ASCII.GetBytes(data); // 开始发送数据给远程目标.
handler.BeginSend(byteData, , byteData.Length, ,
new AsyncCallback(SendCallback), handler);
} private static void SendCallback(IAsyncResult ar)
{ // 从state对象获取socket.
Socket handler = (Socket)ar.AsyncState; //完成数据发送
int bytesSent = handler.EndSend(ar); handler.Shutdown(SocketShutdown.Both);
handler.Close();
} private void button2_Click(object sender, EventArgs e)
{
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
socket.Connect(IPAddress.Parse("192.168.10.128"), );
socket.Send(Encoding.ASCII.GetBytes("ABCD123"));
}
catch (Exception ex)
{ }
socket.Close();
} private void button1_Click(object sender, EventArgs e)
{
TempThread = new Thread(new ThreadStart(StartReceive));
TempThread.Start();
}
}
}

客户端

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets; namespace Client
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
IPAddress ip = IPAddress.Parse("192.168.10.128"); Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); try
{
client.Connect(ip, ); }
catch (Exception ex)
{
MessageBox.Show("连接失败!");
return;
} try
{
client.Send(Encoding.ASCII.GetBytes(this.textBox1.Text));
}
catch (Exception)
{
client.Shutdown(SocketShutdown.Both);
client.Close();
return;
} Box box = new Box(); box.WorkSocket = client; client.BeginReceive(box.Bytes, , box.Bytes.Length, SocketFlags.None, new AsyncCallback(Receive), box);
} public void Receive(IAsyncResult ar)
{
string content = string.Empty; Box box = (Box)ar.AsyncState; Socket client = box.WorkSocket; int length = client.EndReceive(ar); if (length > )
{
box.Builder.Append(Encoding.ASCII.GetString(box.Bytes, , length)); content = box.Builder.ToString(); if (content.IndexOf("") > -)
{
MessageBox.Show(content);
client.Close();
}
else
{
client.BeginReceive(box.Bytes, , box.Bytes.Length, SocketFlags.None, new AsyncCallback(Receive), box);
}
}
} public class Box
{
Socket workSocket; public Socket WorkSocket
{
get { return workSocket; }
set { workSocket = value; }
} byte[] bytes = new byte[]; public byte[] Bytes
{
get { return bytes; }
set { bytes = value; }
} StringBuilder builder = new StringBuilder(); public StringBuilder Builder
{
get { return builder; }
set { builder = value; }
}
} private void Form1_Load(object sender, EventArgs e)
{ }
}
}

实际应用服务器端的开启方法,注意进程休眠的位置是为了解决运行太快接受不到传过来的数据的问题:

public void Start(object port)
{
server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
bool isGo = true;
IPAddress ip = Dns.GetHostAddresses(Dns.GetHostName())[];
server.Bind(new IPEndPoint(ip, int.Parse(port.ToString())));
server.Listen();
while (isGo)
{
try
{
s = server.Accept();
Thread.Sleep(); //这里要注意,服务器端休眠的时间一定要比客户端少,否则和客户端一样或者大会导致客户端接收不到数据,不休眠自己会接收不到数据。
s.SendTimeout = ;
string content = "";
byte[] bytes = new byte[s.Available];
int num = s.Receive(bytes, , bytes.Length, SocketFlags.None); content = Encoding.UTF8.GetString(bytes); if (content.Equals("conn"))
{
s.Send(Encoding.UTF8.GetBytes("Data Source=" + ip.ToString() + ";Initial Catalog=DM;Persist Security Info=True;User ID=dm;Password=dm"));
}
if (content.Equals("Close"))
{
isGo = false;
}
}
catch (Exception ex)
{ }
}
s.Close();
server.Close();
}

这是修改后的客户端接受代码:

private void button1_Click(object sender, EventArgs e)
{
IPAddress ip = IPAddress.Parse("192.168.10.128"); Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); try
{
client.Connect(ip, ); }
catch (Exception ex)
{
MessageBox.Show("连接失败!");
return;
} try
{
client.Send(Encoding.UTF8.GetBytes(this.textBox1.Text));
}
catch (Exception)
{
client.Shutdown(SocketShutdown.Both);
client.Close();
return;
}
string content = string.Empty;
int num = ;
Thread.Sleep();
byte[] b = new byte[client.Available];
num = client.Receive(b, , b.Length, SocketFlags.None);
content = Encoding.UTF8.GetString(b);
MessageBox.Show(content);
client.Close();
client.Dispose();
}

Socket代码的更多相关文章

  1. Netty实现的一个异步Socket代码

    本人写的一个使用Netty实现的一个异步Socket代码 package test.core.nio; import com.google.common.util.concurrent.ThreadF ...

  2. SSL握手通信详解及linux下c/c++ SSL Socket代码举例

    SSL握手通信详解及linux下c/c++ SSL Socket代码举例 摘自:http://www.169it.com/article/3215130236.html   分享到:8     发布时 ...

  3. SSL握手通信详解及linux下c/c++ SSL Socket代码举例(另附SSL双向认证客户端代码)

    SSL握手通信详解及linux下c/c++ SSL Socket代码举例(另附SSL双向认证客户端代码) 摘自: https://blog.csdn.net/sjin_1314/article/det ...

  4. 网络编程之Socket代码实例

    网络编程之Socket代码实例 一.基本Socket例子 Server端: # Echo server program import socket HOST = '' # Symbolic name ...

  5. 简单的 socket 代码

    TCP 编程 客户端代码 将键盘输入的字符发送到服务端,并将从服务端接收到的字符输出到终端 #!/usr/python3 import socket def socket_client(): s = ...

  6. socket 代码实例

    ​ 1. TCP SOCKET 客户端: #!/usr/bin/env python # -*-coding:utf-8 -*- import socket HOST = 'localhost' PO ...

  7. python入门之socket代码练习

    Part.1 简单的socket单次数据传输 服务端: #服务器端 import socket server = socket.socket() # 声明socket类型,同时生成socket连接对象 ...

  8. 完整的Socket代码

    先上图 列举一个通信协议 网关发送环境数据 此网关设备所对应的所有传感器参数,格式如下: 网关发送: 包长度+KEY值+请求类型+发送者+接收者+消息类型+消息内容 说明: 包长度:short int ...

  9. Python全栈开发:socket代码实例

    客户端与服务端交互的基本流程 服务端server #!/usr/bin/env python # -*- coding;utf-8 -*- import socket sk = socket.sock ...

随机推荐

  1. Springboot- Spring缓存抽象学习笔记

    Spring缓存作用准备: 1.准备数据(准备一个有数据的库和表/导入数据库文件,准备好表和表里面的数据) 2.创建javaBean封装数据 3.整合MyBatis操作数据库( 这里用MyBatis) ...

  2. localhost不能访问127.0.0.1可以访问的原因以及解决办法

    今天在调试程序的时候,出现了一个奇怪问题,localhost不能访问但127.0.0.1可以访问? localhost与127.0.0.1的概念和工作原理之不同 要比较两个东西有什么不同,首先要弄清两 ...

  3. Robot Framework(一)

    一. 定义 Robot Framework是一款python编写的功能自动化测试框架,具有良好的可扩展性,支持关键字驱动,可以同时测试多种类型的客户端或者接口,可以进行分布式测试执行 二. Robot ...

  4. 后台操作日志,插入数据获取的该数据主键ID为null

    代码如下: @Override public void saveTopicResource(TopicResourceModel model, Integer userId) { TopicResou ...

  5. shiro源码解析--------欢迎指出错误地方,还有一起讨论一下ShiroFilterFactoryBean配置过滤URL规则

    啦啦啦啦 啦啦啦啦啦 啦啦啦啦啦 啦啦啦啦啦 啦啦啦啦啦 啦啦啦啦啦 啦啦啦啦啦 啦啦啦啦啦 啦啦啦啦啦 啦啦啦啦啦 啦啦啦啦啦 啦啦啦啦啦 啦啦啦啦啦 啦啦啦啦啦 啦啦啦啦啦 啦啦啦啦啦 啦啦啦啦啦 ...

  6. IOS-支付宝

      一.使用支付宝进行一个完整的支付功能,大致有以下步骤: 与支付宝签约,获得商户ID(partner)和账号ID(seller) 下载相应的公钥私钥文件(加密签名用) 下载支付宝SDK 生成订单信息 ...

  7. Android 框架学习1:EventBus 3.0 的特点与如何使用

    前面总结了几篇基础,在这过程中看着别人分享自定义 View.架构或者源码分析,看起来比我写的"高大上"多了,内心也有点小波动. 但是自己的水平自己清楚,基础不扎实画再多源码流程图也 ...

  8. 第二章 Linux目录介绍

    一级目录 /bin (普通用户)二进制命令所在目录 备注 /boot LINUX内核及系统引导程序所需的文件目录 常见分区:128M swap内存的1.5倍 /dev 设备文件的目录 比如声卡.磁盘. ...

  9. 人生苦短之我用Python篇(遍历、函数、类)

    #遍历 info = {'key1':'value1','key2':'value2','key3':'value3'} #方式一 for i in info: print(i,info[i]) #方 ...

  10. I.MX6 change boot partition 1 to User area

    /************************************************************************************ * I.MX6 change ...