服务器端

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
namespace wangluoqi
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
//点击监听按钮时 创建Socket对像
Socket socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个Socket对象,如果用UDP协议,则要用SocketTyype.Dgram类型的套接字 //声明ip地址
IPAddress ip = IPAddress.Any; //创建端口对像
IPEndPoint point = new IPEndPoint(ip, Convert.ToInt32(txtprot.Text)); //开始监听
socketWatch.Bind(point);
ShowMsg("监听成功");
//声明一秒内可同时连接的客户端
socketWatch.Listen(); //创建后台进程用来监听连接
Thread td = new Thread(listen);
td.IsBackground = true;
td.Start(socketWatch); }
Socket socketSend;
Dictionary<string, Socket> dc = new Dictionary<string, Socket>();
/// <summary>
/// 创建通信的客户端
/// </summary>
/// <param name="o"></param>
void listen(object o)
{
//把对像转成socket 如果不为socket 返回null
Socket socketwatch = o as Socket;
while (true)
{ //等待客户端连接 创建一个负责通信的Socket
socketSend = socketwatch.Accept();
dc.Add(socketSend.RemoteEndPoint.ToString(), socketSend);
comboBox1.Items.Add(socketSend.RemoteEndPoint.ToString());
ShowMsg(socketSend.RemoteEndPoint.ToString() + ":连接成功"); //新建一个进程,以免程序假死
Thread th = new Thread(Receive);
th.IsBackground = true;
th.Start(socketSend); }
} /// <summary>
/// 不停的接收传过来的数据
/// </summary>
/// <param name="o"></param>
void Receive(object o)
{
try
{
while (true)
{
Socket socketSend = o as Socket; byte[] buffer = new byte[ * * ];
int r = socketSend.Receive(buffer);
if (r == )
{
break;
}
string str = Encoding.UTF8.GetString(buffer, , r);
ShowMsg(socketSend.RemoteEndPoint + ":" + str);
}
}
catch { }
} private void ShowMsg(string str)
{
txtlog.AppendText(str + "\r\n");
} private void Form1_Load(object sender, EventArgs e)
{
//取消跨线层访问判断
Control.CheckForIllegalCrossThreadCalls = false;
} private void button4_Click(object sender, EventArgs e)
{
string str = txtsend.Text;
byte[] buf = Encoding.UTF8.GetBytes(str);
List<byte> blist = new List<byte>();
blist.Add();
blist.AddRange(buf);
//将泛型集合转为数组
byte[] nbuf = blist.ToArray(); if (comboBox1.SelectedItem == null)
{
comboBox1.SelectedIndex = ;
}
dc[comboBox1.SelectedItem.ToString()].Send(nbuf); // socketSend.Send(buf);
} private void button2_Click(object sender, EventArgs e)
{
OpenFileDialog odg = new OpenFileDialog();
odg.InitialDirectory = @"C:\Users\Administrator\Desktop";
odg.ShowDialog(); string filepath = odg.FileName;
txtfilename.Text = filepath; } //发送文本
private void button3_Click(object sender, EventArgs e)
{
string stpath = txtfilename.Text;
if (comboBox1.SelectedItem == null)
{
comboBox1.SelectedIndex = ;
}
using(FileStream fsRead=new FileStream(stpath,FileMode.OpenOrCreate,FileAccess.Read))
{
byte[] buf = new byte[ * * ];
int r = fsRead.Read(buf, , buf.Length);
List<byte> nlist= new List<byte>();
nlist.Add();
nlist.AddRange(buf);
//将集合转为数组;
byte[] nbuf = nlist.ToArray();
dc[comboBox1.SelectedItem.ToString()].Send(nbuf, , r+, SocketFlags.None);
}
} //发送窗口抖动
private void button5_Click(object sender, EventArgs e)
{
if (comboBox1.SelectedItem == null)
{
comboBox1.SelectedIndex = ;
}
byte[] buf = new byte[];
buf[] = ;
dc[comboBox1.SelectedItem.ToString()].Send(buf);
}
}
}

客户端

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms; namespace clent
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Socket socketsend = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//连接服务器
private void button1_Click(object sender, EventArgs e)
{
//创建连接用的socket //创建连接点
IPAddress ip = IPAddress.Parse(txtip.Text);
//创建要连接的网络点
IPEndPoint point = new IPEndPoint(ip, Convert.ToInt32(txtpint.Text)); //连接
socketsend.Connect(point);
ShowMsg("连接成功"); //创建一个后台线层,用于接收服务器发来的数据
Thread td = new Thread(jssend);
td.IsBackground = true;
td.Start(); } /// <summary>
/// 接收数据
/// </summary>
void jssend()
{
try
{
while (true)
{ byte[] buf = new byte[ * * ];
//实际接收到的字符数
int r = socketsend.Receive(buf);
if (r == )
{
break;
}
//表示接收到的数据是文本
if (buf[] == )
{
string str = Encoding.UTF8.GetString(buf, , r-);
txtlog.AppendText(socketsend.RemoteEndPoint + ":" + str + "\r\n");
}
else if (buf[] == )//表示接收到的数据是文件
{
SaveFileDialog sdg = new SaveFileDialog();
sdg.InitialDirectory = @"C:\Users\Administrator\Desktop";
sdg.Title = "选择保存位置";
sdg.ShowDialog(this);//此处一定要添加this string filename = sdg.FileName;
using (FileStream fsw = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
fsw.Write(buf, , r - );
}
MessageBox.Show("保存成功"); }
else if (buf[] == )//表示接收到的数据是窗口抖动
{
int x = this.Location.X;
int y = this.Location.Y;
for (int i = ; i < ; i++)
{
this.Location = new Point(x - , y - );
this.Location = new Point(x, y); }
} }
}
catch{}
} void ShowMsg(string str)
{
txtlog.AppendText(str + "\r\n");
} private void button2_Click(object sender, EventArgs e)
{
byte[] buf = Encoding.UTF8.GetBytes(txtsend.Text);
socketsend.Send(buf);
} private void Form1_Load(object sender, EventArgs e)
{
Control.CheckForIllegalCrossThreadCalls = false;
}
}
}

实例下载

C#Socket 案例的更多相关文章

  1. 一个Android Socket的例子

    1.开篇简介 Socket本质上就是Java封装了传输层上的TCP协议(注:UDP用的是DatagramSocket类).要实现Socket的传输,需要构建客户端和服务器端.另外,传输的数据可以是字符 ...

  2. 基于心跳的socket长连接

    http://coach.iteye.com/blog/2024444 基于心跳的socket长连接 博客分类: http socket 案例: 心跳: socket模拟网页的报文连接某个网站,创建t ...

  3. 一个Android Socket的例子(转)

    1.开篇简介 Socket本质上就是Java封装了传输层上的TCP协议(注:UDP用的是DatagramSocket类).要实现Socket的传输,需要构建客户端和服务器端.另外,传输的数据可以是字符 ...

  4. 网络编程系统化学习(1.1.)--socket基础

    大纲 学完该阶段内容,你将会很好的完成如下的面试题 socket面试试题相关: 1.写一个简单的socket程序,实现客户端发送数据,服务端收到数据后,将该内容转发给客户端 2.简要概述一下socke ...

  5. python - socket通信笔记

    参考: 通过编写聊天程序来熟悉python中多线程和socket的用法:https://www.cnblogs.com/mingjiatang/p/4905395.html python socket ...

  6. Java网络编程初探

    IP地址案例 package ch17; import javax.swing.text.Style; import java.net.InetAddress; /** * Created by Ji ...

  7. python中网络编程基础

    一:什么是c\s架构 1.c\s即client\server 客户端\服务端架构. 客户端因特定的请求而联系服务器并发送必要的数据等待服务器的回应最后完成请求 服务端:存在的意义就是等待客户端的请求, ...

  8. 1高并发server:多路IO之select

     1 select A:select能监听的文件描写叙述符个数受限于FD_SETSIZE,一般为1024.单纯改变进程打开 的文件描写叙述符个数并不能改变select监听文件个数 B:解决1024 ...

  9. openresty开发系列36--openresty执行流程之6日志模块处理阶段

    openresty开发系列36--openresty执行流程之6日志模块处理阶段 一)header_filter_by_lua 语法:header_filter_by_lua <lua-scri ...

随机推荐

  1. jq原创幻灯片插件slideV1.0

    jq各种插件层出不穷,当然幻灯片插件也不例外,于是本人也自已写了一款,对于目前所做项目来说,足够用了,slideV1.0插件使用很简单,配置如下: 1.三种按钮类型接口选择(默认类型.数字类型.缩略图 ...

  2. mysql innerjoin left join right join 解析

    毕业半年多时间,一直都没有学习好join  之前一直是先从一个表里面取出数据然后,然后再从另外一个表里面取出数据,然后再写一个函数循环格式化数据. 还是先写一下学到的东西吧! 转载自w3school ...

  3. ubuntu14.04使用reaver跑pin码

    今天刚说过没找到支持ubuntu14.04用reaver跑pin的旧版库文件这就有摸索到方法了... 另外安装系统ubuntu14.04以及一系列破解工具比如aircrack,minidwep等都不在 ...

  4. ASP超级网店V2.5一注入漏洞

    Title:ASP超级网店V2.5一注入漏洞  --2011-10-30 17:59 ASP超级网店V2.5 这个系统,有很多地方可以注入 http://www.xxxxxx.com/admin/pi ...

  5. Install the Yeoman toolset

    参照:http://yeoman.io/codelab/setup.html 1:$npm install --global yo bower grunt-cli 提示以下错误 npm ERR! /p ...

  6. CentOS 6.5 + Nginx 1.8.0 + PHP 5.6(with PHP-FPM) 负载均衡源码安装 之 (三)Nginx负载均衡配置

    Nginx反向代理到单个PHP-FPM(PHP-FPM可位于不同机器) 0.首先,创建我们的网站根目录[注:须在PHP-FPM所在的那台机器创建](以后网站的代码放到此目录下): mkdir /opt ...

  7. AD14中如何定义PCB尺寸大小(不同于AD9和10)

    以前用的着软件基本都是停留在9和10,14用的少,虽然14增加了很多功能,但是也带来了不变,虽然可以打开各种其他格式的文件,但是有些地方的改动不容忽略,在一个完整的板子下来需要用到的每个地方的点也会有 ...

  8. C++调用DLL有两种方法——静态调用和动态调用

    C++调用DLL有两种方法——静态调用和动态调用 标签: dllc++winapinullc 2011-09-09 09:49 11609人阅读 评论(0) 收藏 举报  分类: cpp(30)  [ ...

  9. SpringBoot笔记一

    1 开始 1.1 spring介绍 Spring Boot使开发独立的,产品级别的基于Spring的应用变得非常简单,你只需"just run". 我们为Spring平台及第三方库 ...

  10. iOS 9之New UIKit for International User Interfaces

    金田 Apple一直是注重用户体验的典范,而此次在UI上面,更是做到极致.此次iOS 9的发布能完全支持阿拉伯语.希伯来语等书写和阅读方式为从右向左的语言环境.不仅仅是简单的基础文本,而是支持将界面翻 ...