服务器端:

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; namespace SOCKET网络编程
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void btnWatch_Click(object sender, EventArgs e)
{
//创建一个负责监听的Socket
Socket socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//创建IP地址和端口号对象
IPAddress ip = IPAddress.Any;//这句Any是获取自己当前本机的IP,
//IPAddress ip=IPAdress.Parse(txtIP.Text); 这句是获取textbox里面输入的地址
IPEndPoint point = new IPEndPoint(ip, Convert.ToInt32(txtPort.Text));//这里是获取文本框里输入的端口号,创建了一个端口对象,需要传入ip跟端口号
//让负责监听的Socket绑定IP地址跟端口号
socketWatch.Bind(point);
ShowMsg("监听成功");
//设置监听队列
socketWatch.Listen(10);
Thread th = new Thread(listen);
th.IsBackground = true;
th.Start(socketWatch); }
void listen(object o)
{
Socket socketWatch = o as Socket;//as的用法就是如果可以的话,那就直接转换过去
while (true)
{
//负责监听的Socket 来接收客户端的连接 创建跟客户端通信的Socket
Socket socketSend = socketWatch.Accept();
//如果接收成功,把发送端的地址显示出来
ShowMsg(socketSend.RemoteEndPoint.ToString() + "连接成功");
//客户端连接成功后,服务器应该接收客户端发来的消息
//开启一个新线程,不停的接收客户端发来的信息
Thread th = new Thread(Recive);
th.IsBackground = true;
th.Start(socketSend); }
}
/// <summary>
/// 服务器端接收客户端发来的信息
/// </summary>
/// <param name="o"></param>
void Recive(object s)
{
Socket socketSend = s as Socket;
while (true)
{
//客户端连接成功后,服务器应该接收客户端发来的消息
byte[] buffer = new byte[1024 * 1024 * 5];
int r = socketSend.Receive(buffer); //实际接收到的字节数
if(r==0)
{
break;
}
string str = Encoding.UTF8.GetString(buffer, 0, r);//把接收到的字节转成字符串
ShowMsg(socketSend.RemoteEndPoint + ":" + str);
}
}
void ShowMsg(string str)
{
txtShow.AppendText(str + "\r\n");
} private void Form1_Load(object sender, EventArgs e)
{
Control.CheckForIllegalCrossThreadCalls = false;
}
}
}

客户端:

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.Tasks;
using System.Windows.Forms; namespace 接收端
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Socket sok = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
private void btnWatch_Click(object sender, EventArgs e)
{ IPAddress ip = IPAddress.Parse(txtIP.Text);
IPEndPoint point = new IPEndPoint(ip, Convert.ToInt32(txtPort.Text));
sok.Connect(point);
ShowMsg("连接成功"); }
void ShowMsg(string str)
{
MessageBox.Show(str + "\r\n");
}
/// <summary>
/// 客户端给服务器发送消息
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
string str = txtSend.Text.Trim();
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(str);
sok.Send(buffer); }
}
}

客户端发送信息给服务器以及服务器接收客户端发来的信息(socket)的更多相关文章

  1. C# 建立UDP服务器并接收客户端数据

    C# 建立UDP服务器并接收客户端数据 2015-02-11 17:20 1218人阅读 评论(0) 收藏 举报  分类: C#开发技术(22)  版权声明:本文为博主原创文章,未经博主允许不得转载. ...

  2. {网络编程}和{多线程}应用:基于TCP协议【实现多个客户端发送文件给一个服务器端】--练习

    要求: 实现多个客户端发送文件给一个服务器端 提示:多个人创建客户端发送文件,服务端循环接收socket,从socket中获取文件 说明:这里我们只要建立一个服务端就可以了,然后让多台电脑使用客户端给 ...

  3. httpurlconnection发送文件到服务端并接收

    httpurlconnection发送文件到服务端并接收 客户端 import java.io.DataInputStream; import java.io.File; import java.io ...

  4. 深入Redis客户端(redis客户端属性、redis缓冲区、关闭redis客户端)

    深入Redis客户端(redis客户端属性.redis缓冲区.关闭redis客户端) Redis 数据库采用 I/O 多路复用技术实现文件事件处理器,服务器采用单线程单进程的方式来处理多个客户端发送过 ...

  5. 【代码笔记】Java深入学习——实现客户端发送文件到服务器的文件传输

    Server.java package com.huaxin.lesson02; import java.io.FileOutputStream; import java.io.InputStream ...

  6. android下socket编程问题:服务器关闭时,客户端发送请求的异常处理

    我用socket分别创建了一个服务器和一个客户端. 当服务器程序运行时,客户端和服务器发送接收数据是OK的. 但是,如果服务器程序关闭以后,客户端仍然发送请求的话,会抛出一个IOException.但 ...

  7. java后台服务器向Nodejs客户端发送压缩包文件

    java代码: Map map=new HashMap(); try { //获取本地文件转换成字符换 File file = new File(apppath);//"D:/upload/ ...

  8. nodejs向远程服务器发送post请求----融云Web SDK/客户端获取token

    最近要用到一个叫融云的及时通讯的SDK,在获取token这个步骤的时候有点卡顿,以防以后碰到类似的问题,再此记录一下. 客户端通过融云 SDK 每次连接服务器时,都需要向服务器提供 Token,以便验 ...

  9. SSH服务器与Android通信(3)--Android客户端发送数据

    Android客户端向SSH服务器发送数据主要有三种情况:通过客户端删除数据.添加数据和修改数据. 1.删除数据 先看看jsp文件里面是怎样删除数据的: <td align="cent ...

  10. java socket 一个服务器对应多个客户端,可以互相发送消息

    直接上代码,这是网上找的demo,然后自己根据需求做了一定的修改.代码可以直接运行 服务器端: package socket; import java.io.BufferedReader; impor ...

随机推荐

  1. 使用nodejs编写api接口并部署到服务器上

    一.用node.js编写api接口 1.安装node环境,没有就去下载nodejs, 下载地址 2.创建一个node项目, 新建一个目录文件,例node_proxy 3.在新建的node项目执行npm ...

  2. [深度学习] caffe分类模型训练、结果可视化、部署及量化笔记

    本文为本人caffe分类网络训练.结果可视化.部署及量化具体过程的心得笔记.caffe目前官方已经停止支持了,但是caffe是目前工业落地最常用的深度学习框架,用的人挺多.其实主要怕自己忘了,弄个备份 ...

  3. Auto-Job任务调度框架

    Auto-Job 任务调度框架 一.背景 生活中,业务上我们会碰到很多有关作业调度的场景,如每周五十二点发放优惠券.或者每天凌晨进行缓存预热.亦或每月定期从第三方系统抽数等等,Spring和java目 ...

  4. Redis-03 Redis事务

    需要特别注意,Redis 的命令是原子性的,而 Redis 的事务是非原子性的 事务相关命令 MULTI 命令 开启事务命令,Redis将操作命令逐个放到队列中,根据EXEC命令来原子化执行命令 EX ...

  5. VuePress个人博客搭建

    vuepress概述 VuePress 由两部分组成:第一部分是一个极简静态网站生成器 (opens new window),它包含由 Vue 驱动的主题系统和插件 API,另一个部分是为书写技术文档 ...

  6. (一)elasticsearch 编译和启动

    1.准备 先从github官网上clone elasticsearch源码到本地,选择合适的分支.笔者这里选用的是7.4.0(与笔者工作环境使用的分支一致),此版本编译需要jdk11. 2.编译 Re ...

  7. C组合方案

    递归实现组合型枚举 从 1∼n 这 n 个整数中随机选出 m 个,输出所有可能的选择方案. 输入格式 两个整数 n,m ,在同一行用空格隔开. 输出格式 按照从小到大的顺序输出所有方案,每行 1 个. ...

  8. Java基础学习笔记-数据类型、数制

    数据类型,跟JS感觉差异不是很大,但是有个String不是很一样的样子 数据类型分为 基本数据类型和复合数据类型 基本数据类型分为下面三种 数值类型 1.整数类型:byte,short,int,lon ...

  9. c++ 跑酷小游戏之用户体验plus

    #undef UNICODE#undef _UNICODE#include <iostream>#include <iomanip>#include <string> ...

  10. 为啥要对jvm做优化?

    摘要:在jvm中有很多的参数可以进行设置,这样可以让jvm在各种环境中都能够高效的运行.绝大部分的参数保持默认即可. 本文分享自华为云社区<为什么需要对jvm进行优化,jvm运行参数之标准参数& ...