首先,看主界面

点击链接按钮,开始建立与服务端的连接

  Socket socket = null;
private void btnStart_Click(object sender, EventArgs e)
{
IPAddress ip = IPAddress.Parse(txtIP.Text); //获取IP地址
IPEndPoint enpoint = new IPEndPoint(ip, int.Parse(txtPort.Text)); //获取网络端点(IP+端口号)
//创建Socket对象,连接服务器端
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
socket.Connect(enpoint); //连接
SetText("连接成功!");
this.btnStart.Enabled = false; //连接成功后,按钮禁用 //接收服务器消息
Thread th = new Thread(RecMsg); //在另一个线程中接收服务端发来的信息
th.Start();
}
catch(Exception ex)
{
SetText(ex.Message);
}
}

那么我们再来看看这个RecMsg方法

    void RecMsg()
{
while (true)
{
byte[] buffer = new byte[1024 * 1024 * 5]; //消息大小不能超过5M
int count = -1;
try
{
//接收的有效信息
count = socket.Receive(buffer);
}
catch(Exception ex)
{
SetText(ex.Message);
break;
} int flag=buffer[0]; 、//获取消息的第一个字节,0代表是字符,1代表是文件
if (flag == 0)//接收文字
{
//首字节是标示符,所以重第二个位置开始转换
string s = Encoding.UTF8.GetString(buffer, 1, count-1);
SetText(s);
}
else if (flag == 1)//接收文件
{
SaveFileDialog sfd = new SaveFileDialog();
if (sfd.ShowDialog(this) == DialogResult.OK)
{
//创建文件流
using (FileStream fs = new FileStream(sfd.FileName, FileMode.Create))
{
fs.Write(buffer, 1, count - 1); //将buffer中的数据写入到文件流中
MessageBox.Show("保存车成功!");
}
}
}
}
}

现在我们已经能接收到服务端发来的消息了,再来看看向服务端发送消息

   private void btnSend_Click(object sender, EventArgs e)
{
if (socket != null)
{
try
{
byte[] buffer = Encoding.UTF8.GetBytes(txtMessage.Text);
socket.Send(buffer);
}
catch(Exception ex)
{
SetText(ex.Message);
}
}
}
}

最后提示一下:要在窗体构造函数中添加一行代码

  Control.CheckForIllegalCrossThreadCalls = false;

允许主线程以外的线程访问窗体上的控件 。

Socket 编程(二)的更多相关文章

  1. linux网络编程之socket编程(二)

    今天继续对socket编程进行研究,这里会真正开如用socket写一个小例子,进入正题: TCP客户/服务器模型:   关于这个模型的流程这里就不多说了,比较容易理解,下面则利用这种模型来编写一个实际 ...

  2. python基础之socket编程(二)

    ssh远程执行命令: 思路分析: 客户端给服务端发送命令,服务端返回一个输出结果传给客户端. #coding:utf-8 #买手机 import socket import struct import ...

  3. Python 基础之socket编程(二)

    Python 基础之socket编程(二) 昨天只是对socket编程做了简单的介绍,只是把socket通信的框架搭建起来,要对其中的功能进行进一步的扩充,就来看看今天的料哈! 一.基于tcp的套接字 ...

  4. Linux下的C Socket编程 -- 获取对方IP地址

    Linux下的C Socket编程(二) 获取域名对应的IP地址 经过上面的讨论,如果我们想要连接到远程的服务器,我们需要知道对方的IP地址,系统函数gethostbyname便能够实现这个目的.它能 ...

  5. Java Socket聊天室编程(二)之利用socket实现单聊聊天室

    这篇文章主要介绍了Java Socket聊天室编程(二)之利用socket实现单聊聊天室的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下 在上篇文章Java Socket聊天室编程(一)之 ...

  6. Java网络编程二:Socket详解

    Socket又称套接字,是连接运行在网络上两个程序间的双向通讯的端点. 一.使用Socket进行网络通信的过程 服务端:服务器程序将一个套接字绑定到一个特定的端口,并通过此套接字等待和监听客户端的连接 ...

  7. Py修行路 python基础 (二十四)socket编程

    socket编程 一.客户端/服务端架构 客户端/服务端架构 即C/S架构,包括:1.硬件C/S架构,2.软件C/S架构. 互联网中处处都是C/S架构,学习socket 就是为了完成C/S架构的开发. ...

  8. Linux学习之socket编程(二)

    Linux学习之socket编程(二) 1.C/S模型——UDP UDP处理模型 由于UDP不需要维护连接,程序逻辑简单了很多,但是UDP协议是不可靠的,实际上有很多保证通讯可靠性的机制需要在应用层实 ...

  9. JAVA Socket 编程学习笔记(二)

    在上一篇中,使用了 java Socket+Tcp/IP  协议来实现应用程序或客户端--服务器间的实时双向通信,本篇中,将使用 UDP 协议来实现 Socket 的通信. 1. 关于UDP UDP协 ...

  10. JAVA Socket编程(二)之TCP通信

    基于TCP(面向连接)的socket编程,分为客户端和服务器端. 客户端的流程如下: (1)创建套接字(socket) (2)向服务器发出连接请求(connect) (3)和服务器端进行通信(send ...

随机推荐

  1. mysql 中delete和trncate区别

    mysql中删除表记录delete from和truncate table的用法区别: MySQL中有两种删除表中记录的方法:(1)delete from语句,(2)truncate table语句. ...

  2. python--生成器协程运算

    生成器 一.yield运行方式 我们定义一个如下的生成器: def put_on(name): print("Hi {}, 货物来了,准备搬到仓库!".format(name)) ...

  3. Bootsrap 直接使用

    Bootstrap3 直接使用 <!DOCTYPE html> <html> <head> <title>Bootstrap3</title> ...

  4. springsecurity basic 认证

    Basic Access Authentication scheme是在HTTP1.0提出的认证方法,它是一种基于challenge/response的认证模式,针对特定的realm需要提供用户名和密 ...

  5. 莫队 Codeforces Round #340 (Div. 2) E

    题目大意:给你一个长度为n的序列,有m个询问,每次询问一个区间[L,R],表示这个区间内,有多少的a[i]^a[i+1].....^a[j]=k. 思路:莫队去搞就好了 我们定义pre[i]=a[1] ...

  6. 怎样用javascript关闭本窗口

    大家都知道window.close()是用来关闭窗口的,而且ie和firefox都是支持的. 为了实现用户对浏览器的绝对控制,ie中用close关闭非open打开的窗口时回弹出一个对话框询问用户,怎么 ...

  7. Verilog笔记.4.inout端口

    inout是一个双向端口,实现为使用三态门,第三态为高阻态‘z’. 在实际电路中高阻态意味着响应的管脚悬空.断开. 当三态门的控制信号为真时,三态门选通,作输出端口使用:控制信号为假时,三态门是高阻态 ...

  8. Python ctypes中cast/py_object用法

    class ctypes.py_object Represents the C PyObject * datatype. Calling this without an argument create ...

  9. 使用showplan.sql分析sql Performance

    在HelloDBA网站找到一个分析sql性能的工具-showplan,记录一下 showplan.sql下载路径:http://www.HelloDBA.com/Download/showplan.z ...

  10. 百度地图js lite api 支持点聚合

    百度地图lite api 是专门为h5 绘制海量点设计的,但是偏偏忽略掉了点聚合的需求,所以需要自己动手,做一次二次改造. 我们知道点聚合需要引入开源库: MarkerClusterer:  http ...