Socket通信第二版--包含文件的发送和窗口抖动

SocketServer端:

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.Sockets;

using System.Net;

using System.Threading;

using System.IO;

namespace SocketServer

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

Dictionary<string, Socket> dicCbolist = new Dictionary<string, Socket>();

private void btnStartListen_Click(object sender, EventArgs e)

{

try

{

Socket socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

IPAddress ip = IPAddress.Parse(this.txtIP.Text);//IPAddress.Any;//new IPAddress(Encoding.Default.GetBytes(this.txtIP.Text));

IPEndPoint point = new IPEndPoint(ip, Convert.ToInt32(this.txtPort.Text));

socketWatch.Bind(point);

txtLog.AppendText("监听成功!\r\n");

socketWatch.Listen(10);

Thread th = new Thread(Listens);

th.IsBackground = true;

th.Start(socketWatch);

}

catch { }

}

void Listens(object o)

{

try

{

Socket socketWatch = o as Socket;

//循环等待客户端链接,并新创建一个发送Socket

while (true)

{

Socket socketSend = socketWatch.Accept();

dicCbolist.Add(socketSend.RemoteEndPoint.ToString(), socketSend);

cboSelectIP.Items.Add(socketSend.RemoteEndPoint.ToString());

txtLog.AppendText(socketSend.RemoteEndPoint.ToString() + ":" + "链接成功!\r\n");

cboSelectIP.SelectedItem = socketSend.RemoteEndPoint.ToString();

Thread th = new Thread(Recive);

th.IsBackground = true;

th.Start(socketSend);

}

}

catch { }

}

Socket socketSend;

void Recive(object o)

{

try

{

socketSend = o as Socket;

while (true)

{

byte[] buffer = new byte[1024 * 1024 * 5];

int r = socketSend.Receive(buffer);

if (r == 0)

{

break;

}

string str = Encoding.Default.GetString(buffer, 0, r);

txtLog.AppendText(socketSend.RemoteEndPoint.ToString() + ":" + str + "\r\n");

}

}

catch { }

}

private void Form1_Load(object sender, EventArgs e)

{

Control.CheckForIllegalCrossThreadCalls = false;

}

List<byte> listByte = new List<byte>();

private void btnSendMsg_Click(object sender, EventArgs e)

{

try

{

byte[] buffer = Encoding.Default.GetBytes(this.txtWriteMsg.Text.Trim());

string strIp = this.cboSelectIP.SelectedItem.ToString();

listByte.Add(0);

listByte.AddRange(buffer);

byte[] newBuffer = listByte.ToArray();

dicCbolist[strIp].Send(newBuffer);

}

catch { }

}

private void btnChoose_Click(object sender, EventArgs e)

{

try

{

OpenFileDialog of = new OpenFileDialog();

of.Title = "选择要打开的文件";

of.Filter = "文本文件|*.txt|所有文件|*.*";

of.ShowDialog();

txtFilePath.Text = of.FileName.ToString();

}

catch { }

}

private void btnSendFile_Click(object sender, EventArgs e)

{

try

{

using (FileStream fs = new FileStream(txtFilePath.Text.ToString(), FileMode.OpenOrCreate, FileAccess.Read))

{

byte[] buffer = new byte[1024 * 1024 * 5];

int r = fs.Read(buffer, 0, buffer.Length);

listByte.Add(1);

listByte.AddRange(buffer);

byte[] newBuffer = listByte.ToArray();

dicCbolist[this.cboSelectIP.SelectedItem.ToString()].Send(newBuffer, 0, r, SocketFlags.None);

}

}

catch { }

}

private void btnShake_Click(object sender, EventArgs e)

{

try

{

byte[] buffer = new byte[1];

buffer[0] = 2;

dicCbolist[cboSelectIP.SelectedItem.ToString()].Send(buffer);

}

catch { }

}

}

}

SocketClient端:

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.Sockets;

using System.Net;

using System.Threading;

using System.IO;

namespace SocketClient

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

Socket socketSend;

private void Form1_Load(object sender, EventArgs e)

{

Control.CheckForIllegalCrossThreadCalls = false;

}

private void btnConnet_Click(object sender, EventArgs e)

{

try

{

socketSend = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

IPAddress ip = IPAddress.Parse(this.txtIP.Text); //IPAddress.Any;//new IPAddress(Encoding.Default.GetBytes(this.txtIP.Text));

IPEndPoint point = new IPEndPoint(ip, Convert.ToInt32(this.txtPort.Text));

socketSend.Connect(point);

txtLog.AppendText("链接成功!\r\n");

Thread th = new Thread(Recive);

th.IsBackground = true;

th.Start();

}

catch { }

}

void Recive()

{

try

{

while (true)

{

byte[] buffer = new byte[1024 * 1024 * 5];

int r = socketSend.Receive(buffer);

int i = buffer[0];

if (i == 0)

{

string str = Encoding.Default.GetString(buffer, 1, r);

this.txtLog.AppendText(socketSend.RemoteEndPoint.ToString() + ":" + str + "\r\n");

}

else if (i == 1)

{

SaveFileDialog sfd = new SaveFileDialog();

sfd.Title = "保存文件";

sfd.InitialDirectory = @"C:\Users\Administrator\Desktop";

sfd.ShowDialog(this);

string filePath = sfd.FileName;

using (FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write))

{

fs.Write(buffer, 1, r);

}

MessageBox.Show("保存成功!");

}

else if (i == 2)

{

for (int point = 0; point < 100; point++)

{

this.Location = new Point(this.ClientRectangle.Width, this.ClientRectangle.Width);

this.Location = new Point(this.ClientRectangle.Height + 20, this.ClientRectangle.Width + 50);

}

}

}

}

catch { }

}

private void btnSendMsg_Click(object sender, EventArgs e)

{

try

{

byte[] buffer = Encoding.Default.GetBytes(this.txtWriteMsg.Text.Trim());

socketSend.Send(buffer);

}

catch { }

}

}

}

时间: 2024-11-08 15:37:34

Socket通信第二版--包含文件的发送和窗口抖动的相关文章

django简介,安装,文件介绍,三板斧(render,HttpResponse,redirect)HTTP协议,用socket实现简单版web框架,用wsgiref,jinja2,pymysql实现Django运行流程

1.web应用(https://www.cnblogs.com/Dominic-Ji/p/9167438.html) c/s,b/s架构c/s:客户端 服务端b/s:浏览器 服务器?   2.HTTP协议: 超文本传输协议 四大特性: 1.基于TCP/IP作用在应用层之上的协议,底层实现仍为socket 2.基于请求响应:通信一定是从客户端开始,服务器端接收到客户端一定会做出对应响应 3.无状态:协议不对任何一次通信状态和任何数据做保存 4.无连接:一次连接只完成一次请求-响应,请求-响应完毕后

java socket通信-传输文件图片--传输图片

ClientTcpSend.java   客户端发送类 package com.yjf.test; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.net.InetSocketAddress; import java.net.Socket; public class ClientTcpSend { public static String clien

recv原理、高阶版黏包解决方案、基于UDP的socket通信

recv原理.高阶版黏包解决方案.基于UDP的socket通信 recv原理 源码解释: Receive up to buffersize bytes from the socket. 接收来自socket缓冲区的字节数据, For the optional flags argument, see the Unix manual. 对于这些设置的参数,可以查看Unix手册. When no data is available, block untilat least one byte is av

第二十天 TCP 及socket通信原理、http协议及web服务、httpd核心配置详解

一.TCP及socket通信原理详解 二.http协议及web服务原理(一) 三.http协议及web服务原理(二) 四.httpd核心配置详解 1.tcp.udp是一种传输协议,实现进程地址标记,套接字是一个虚拟设备,用来表明主机上的某个进程      众所周知:0-1023:管理员才有权限使用,永久地分配给某应用使用(由IANA分配)      注册端口:1024-41951:只有一部分被注册,分配原则上非特别严格.      动态端口或私有端口:41952-65535:由内核分配临时端口,

马哥教育第二十天TCP及socket通信原理详解、http协议、httpd

1.tcp.udp是一种传输协议,实现进程地址标记,套接字是一个虚拟设备,用来表明主机上的某个进程      常用端口:0-1023:管理员才有权限使用,永久地分配给某应用使用      注册端口:1024-41951:只有一部分被注册,只要确保主机上没有进程使用该端口.      动态端口或私有端口:41952-65535:由内核分配临时端口,如果临时端口不够可以通过修改内核参数修改临时端口范围       /proc/sys/net/ipv4/ip_local_port_range:定义两个

python - socket通信笔记

参考: 通过编写聊天程序来熟悉python中多线程和socket的用法:https://www.cnblogs.com/mingjiatang/p/4905395.html python socket通信:https://yq.aliyun.com/articles/40745?spm=5176.100239.blogcont40768.17.FIFTZv 1.socket使用方法 a.在python中使用socket时要iamport socket b.在使用socket中又服务器端和客户端之

Android客户端与本地服务器Socket通信

Android客户端与本地服务器Socket通信 Socket服务器运行结果图?? 一.客户端和服务器端的选择: 客户端是我们手机端,关于服务器端,只要安装了JDK,自然就拥有通讯的功能,我们只需要在Eclipse或者MyEclipse中写好文章中服务器端的代码,运行起来即可,用accept()方法启动服务器端,等待客户端的连接,在未连接的情况下,服务器端处于堵塞的状态. 二.客户端注意事项 andriod客户端添加网络访问权限 <uses-permission android:name="

TCP及socket通信原理

一.网络互联模型 因特网在刚面世时,只有同一制造商生产的计算机才能彼此通信,制定网络互联模型的目的就是为异种的计算机互连提供一个共同的基础和标准框架,并为保持相关标准的一致性和兼容性提供共同的参考. 互联参考模型: OSI七层模型(Open System Interconnect):应用层.表示层.会话层.传输层.网络层.数据链路层.物理层 DoD四层模型:是OSI七层模型的浓缩版,包括 进程/应用层.主机到主机层.因特网层.网络接入层 以上两种模型是层次型的,分层模型的优点主要在于: ①将网络

php的socket通信

对TCP/IP.UDP.Socket编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵.那么我想问: 1.         什么是TCP/IP.UDP?2.         Socket在哪里呢?3.         Socket是什么呢?4.         你会使用它们吗? 什么是TCP/IP.UDP? TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,是一个工业标准的协议集,它是为广域网