Socket 编程(二)
首先,看主界面

点击链接按钮,开始建立与服务端的连接
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 编程(二)的更多相关文章
- linux网络编程之socket编程(二)
今天继续对socket编程进行研究,这里会真正开如用socket写一个小例子,进入正题: TCP客户/服务器模型: 关于这个模型的流程这里就不多说了,比较容易理解,下面则利用这种模型来编写一个实际 ...
- python基础之socket编程(二)
ssh远程执行命令: 思路分析: 客户端给服务端发送命令,服务端返回一个输出结果传给客户端. #coding:utf-8 #买手机 import socket import struct import ...
- Python 基础之socket编程(二)
Python 基础之socket编程(二) 昨天只是对socket编程做了简单的介绍,只是把socket通信的框架搭建起来,要对其中的功能进行进一步的扩充,就来看看今天的料哈! 一.基于tcp的套接字 ...
- Linux下的C Socket编程 -- 获取对方IP地址
Linux下的C Socket编程(二) 获取域名对应的IP地址 经过上面的讨论,如果我们想要连接到远程的服务器,我们需要知道对方的IP地址,系统函数gethostbyname便能够实现这个目的.它能 ...
- Java Socket聊天室编程(二)之利用socket实现单聊聊天室
这篇文章主要介绍了Java Socket聊天室编程(二)之利用socket实现单聊聊天室的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下 在上篇文章Java Socket聊天室编程(一)之 ...
- Java网络编程二:Socket详解
Socket又称套接字,是连接运行在网络上两个程序间的双向通讯的端点. 一.使用Socket进行网络通信的过程 服务端:服务器程序将一个套接字绑定到一个特定的端口,并通过此套接字等待和监听客户端的连接 ...
- Py修行路 python基础 (二十四)socket编程
socket编程 一.客户端/服务端架构 客户端/服务端架构 即C/S架构,包括:1.硬件C/S架构,2.软件C/S架构. 互联网中处处都是C/S架构,学习socket 就是为了完成C/S架构的开发. ...
- Linux学习之socket编程(二)
Linux学习之socket编程(二) 1.C/S模型——UDP UDP处理模型 由于UDP不需要维护连接,程序逻辑简单了很多,但是UDP协议是不可靠的,实际上有很多保证通讯可靠性的机制需要在应用层实 ...
- JAVA Socket 编程学习笔记(二)
在上一篇中,使用了 java Socket+Tcp/IP 协议来实现应用程序或客户端--服务器间的实时双向通信,本篇中,将使用 UDP 协议来实现 Socket 的通信. 1. 关于UDP UDP协 ...
- JAVA Socket编程(二)之TCP通信
基于TCP(面向连接)的socket编程,分为客户端和服务器端. 客户端的流程如下: (1)创建套接字(socket) (2)向服务器发出连接请求(connect) (3)和服务器端进行通信(send ...
随机推荐
- c语言时间计算
C语言使用time_t结构体表示时间戳,它本质上是个long类型. 我们可以使用如下函数获取当前时间的时间戳: time_t time(time_t* timer) 函数功能:得到从标准计时点(一般是 ...
- ios 替换字符串中的部分字符串
1.使用NSString中的stringByTrimmingCharactersInset:[NSCharacterSet whitespaceCharacterSet]方法去掉左右两边的空格: 2. ...
- 【整理】explain、type、extra用法和结果的含义
EXPLAIN列详情 详细解读:https://www.cnblogs.com/yycc/p/7338894.html explain显示了mysql如何使用索引来处理select语句以及连接表.可以 ...
- Centos 7 下搭建 Dokuwiki
Centos 7 下搭建 Dokuwiki # Dokuwiki 是php的,所以要先搭建php环境,下载 apache和php,第1.2步下载完,相关的依赖都会下载## 1.下载 httpdyum ...
- IO流-文件拷贝
其实文件的拷贝还是文件读取写入的应用,实际是读取此路径上的文件,然后写入到指定路径下的文件. 代码举例: import java.io.*; import java.lang.*; class Tes ...
- marquee滚动效果
转载两篇文章: http://blog.sina.com.cn/s/blog_49ce67fc0100atb4.html https://baike.1688.com/doc/view-d359560 ...
- kartik\grid\GridView 合计,多选,导出excel,header修改 等方法集合!
先上完整demo 具体的以后再说 <?php //use yii\web\View; use kartik\grid\GridView; use yii\bootstrap\Html; use ...
- python作业员工信息表程序(第四周)
作业需求: 1. 员工信息表程序,实现增删改查操作: 2. 可进行模糊查询,语法至少支持下面3种: select name,age from staff_table where age > 22 ...
- sublime 直接运行php代码
只需要简单的配置就可以进行 操作. 首先配置php环境变量 配置完成后打开sublime 点击新编译系统 { "cmd": ["php", "$fil ...
- linux配置samba服务【原创】
转载请注明出处http://www.cnblogs.com/paul8339/p/7509981.html 需求,windows服务器访问linux的共享文件,需要linux服务器安装并配置samba ...