服务端:

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 服务端
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent(); Control.CheckForIllegalCrossThreadCalls = false;
} /// <summary>
/// 监听socket
/// </summary>
Socket socketListen; Dictionary<string, Socket> dirSocket = new Dictionary<string, Socket>(); //户务端监听客户端连接情况
private void btnListen_Click(object sender, EventArgs e)
{
try
{
socketListen = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPAddress ip = IPAddress.Any; IPEndPoint point = new IPEndPoint(ip, Int32.Parse(txtPort.Text)); socketListen.Bind(point); socketListen.Listen(); showMsg("监听成功"); Thread thread = new Thread(Listen); thread.IsBackground = true; thread.Start();
}
catch (Exception)
{ } } /// <summary>
/// 监听客服端
/// </summary>
void Listen()
{ try
{
//不断的监听客户端
while (true)
{
Socket socket = socketListen.Accept(); showMsg(socket.RemoteEndPoint.ToString() + ":连接成功"); cbList.Items.Add(socket.RemoteEndPoint.ToString()); dirSocket.Add(socket.RemoteEndPoint.ToString(), socket); //不断接受客户端信息
Thread thread = new Thread(Receive); thread.IsBackground = true; thread.Start(socket); } }
catch (Exception)
{ } }
/// <summary>
/// 接收客服端的信息
/// </summary>
/// <param name="o"></param>
void Receive(object o)
{
try
{
Socket socketSend = o as Socket;
byte[] buffer = new byte[ * * ]; while (true)
{
int r = socketSend.Receive(buffer); if (r <= )
{
break;
} string result = Encoding.UTF8.GetString(buffer, , r); showMsg(socketSend.RemoteEndPoint.ToString() + ":" + result); }
}
catch (Exception)
{ } } /// <summary>
/// 显示信息
/// </summary>
/// <param name="msg"></param>
void showMsg(string msg)
{
txtLog.AppendText(msg + "\r\n");
} /// <summary>
/// 发送信息
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnSendMsg_Click(object sender, EventArgs e)
{
string ipAddress = cbList.SelectedItem.ToString(); if (string.IsNullOrEmpty(ipAddress))
{
return;
} string msg = this.txtMsg.Text.Trim(); byte[] msgBytes = Encoding.UTF8.GetBytes(msg); byte[] newArray = GetByteArray(,msgBytes); dirSocket[ipAddress].Send(newArray); } /// <summary>
/// 选择文件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnSelectFile_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
if (ofd.ShowDialog() == DialogResult.OK)
{
this.txtPath.Text = ofd.FileName;
} } /// <summary>
/// 发送文件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnSendFile_Click(object sender, EventArgs e)
{
string ipAddress = cbList.SelectedItem.ToString(); if (string.IsNullOrEmpty(ipAddress))
{
return;
} string filename = this.txtPath.Text.Trim(); byte[] msgBytes = File.ReadAllBytes(filename); byte[] newArray = GetByteArray(, msgBytes); dirSocket[ipAddress].Send(newArray);
} /// <summary>
/// 发送抖屏
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnMoveScreen_Click(object sender, EventArgs e)
{
string ipAddress = cbList.SelectedItem.ToString(); if (string.IsNullOrEmpty(ipAddress))
{
return;
} byte[] newArray = new byte[] { }; dirSocket[ipAddress].Send(newArray);
} /// <summary>
/// 处理发送byte数据
/// </summary>
/// <param name="type"></param>
/// <param name="array"></param>
/// <returns></returns>
private byte[] GetByteArray(int type,byte[] array)
{
byte[] newArray = new byte[array.Length+]; array.CopyTo(newArray, ); switch (type)
{
case :
newArray[] = ;
break;
case :
newArray[] = ;
break;
default:
newArray[] = ;
break;
} return newArray;
} }
}

客服端:

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 客户端
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent(); Control.CheckForIllegalCrossThreadCalls = false;
} Socket socket; private void btnListen_Click(object sender, EventArgs e)
{
try
{ socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPAddress ip = IPAddress.Parse(txtAddress.Text); IPEndPoint point = new IPEndPoint(ip, Int32.Parse(txtPort.Text)); socket.Connect(point); showMsg("连接服务端成功!!!!"); Thread thread = new Thread(Receive); thread.IsBackground = true; thread.SetApartmentState(ApartmentState.STA); thread.Start();
}
catch (Exception ex)
{ }
} void Receive()
{
try
{ byte[] buffer = new byte[ * * ]; while (true)
{ int r = socket.Receive(buffer);
if (r <= ) break; switch (buffer[])
{
case : //文本内容
GetMsg(buffer, r);
break;
case : //文本文件
GetFile(buffer, r);
break; default: //抖屏
GetMoveScreen();
break;
} }
}
catch (Exception)
{ }
} /// <summary>
/// 接收内容
/// </summary>
/// <param name="array"></param>
/// <param name="realLength"></param>
void GetMsg(byte[] array,int realLength)
{
string msg = Encoding.UTF8.GetString(array, , realLength-); showMsg(msg);
}
/// <summary>
/// 接收文件
/// </summary>
/// <param name="array"></param>
/// <param name="realLength"></param>
void GetFile(byte[] array,int realLength)
{
SaveFileDialog sfd = new SaveFileDialog(); if (sfd.ShowDialog() == DialogResult.OK)
{
string filename = sfd.FileName; using(FileStream fs = new FileStream(filename,FileMode.Create,FileAccess.ReadWrite))
{
fs.Write(array, , realLength - );
} showMsg("文件保存到:"+filename+"成功!!!");
}
}
Random r = new Random();
/// <summary>
/// 抖屏
/// </summary>
void GetMoveScreen()
{
Point startPoint = this.Location; for (int i = ; i < ; i++)
{
this.Location = new Point(startPoint.X + r.Next(), startPoint.Y + r.Next());
} this.Location = startPoint;
} /// <summary>
/// 显示内容
/// </summary>
/// <param name="p"></param>
private void showMsg(string p)
{
textBox1.AppendText(p + "\r\n");
} /// <summary>
/// 发送内容
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnSend_Click(object sender, EventArgs e)
{
try
{
string msg = txtMsg.Text.Trim(); byte[] buffer = Encoding.UTF8.GetBytes(msg); socket.Send(buffer);
}
catch (Exception)
{ }
} }
}

socket 聊天室的更多相关文章

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

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

  2. Java Socket聊天室编程(一)之利用socket实现聊天之消息推送

    这篇文章主要介绍了Java Socket聊天室编程(一)之利用socket实现聊天之消息推送的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下 网上已经有很多利用socket实现聊天的例子了 ...

  3. python socket 聊天室

    socket 发送的时候,使用的是全双工的形式,不是半双工的形式.全双工就是类似于电话,可以一直通信.并且,在发送后,如果又接受数据,那么在这个接受到数据之前,整个过程是不会停止的.会进行堵塞,堵塞就 ...

  4. TCP/IP以及Socket聊天室带类库源码分享

    TCP/IP以及Socket聊天室带类库源码分享 最近遇到个设备,需要去和客户的软件做一个网络通信交互,一般的我们的上位机都是作为客户端来和设备通信的,这次要作为服务端来监听客户端,在这个背景下,我查 ...

  5. html5 WebSocket 与 PHP socket 聊天室原理

    html js <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  6. 基于Spring 4.0 的 Web Socket 聊天室/游戏服务端简单架构

    在现在很多业务场景(比如聊天室),又或者是手机端的一些online游戏,都需要做到实时通信,那怎么来进行双向通信呢,总不见得用曾经很破旧的ajax每隔10秒或者每隔20秒来请求吧,我的天呐(),这尼玛 ...

  7. Python socket聊天室程序

    http://blog.csdn.net/calling_wisdom/article/details/42524745 今天用python的socket模块实现了一个聊天室的程序 虽然功能比较简单, ...

  8. 【Unity3D自学记录】Unity3D网络之Socket聊天室初探

    首先创建一个服务端程序,这个程序就用VS的控制台程序做即可了. 代码例如以下: using System; using System.Collections.Generic; using System ...

  9. Socket聊天室-TcpListener,TcpClient

    参考自:http://blog.csdn.net/liguo9860/article/details/6148614 服务端:

  10. socket聊天室(服务端)(多线程)(TCP)

    #include<string.h> #include<signal.h> #include<stdio.h> #include<sys/socket.h&g ...

随机推荐

  1. ActiveMA在CentOS7下的安装

    下载:apache-activemq-5.14.0-bin.tar.gz http://activemq.apache.org/activemq-5157-release.html Getting t ...

  2. 14.5 富文本编辑【JavaScript高级程序设计第三版】

    富文本编辑,又称为WYSIWYG(What You See Is What You Get,所见即所得).在网页中编辑富文本内容,是人们对Web 应用程序最大的期待之一.虽然也没有规范,但在IE 最早 ...

  3. MyBatis:传参

    MyBatis从入门到放弃二:传参 前言 我们在mapper.xml写sql,如果都是一个参数,则直接配置parameterType,那实际业务开发过程中多个参数如何处理呢? 从MyBatis API ...

  4. HTML-XMLHttpRequest

    var xhr = null; if(window.XMLHttpRequest){ xhr= new XMLHttpRequest(); }else{ xhr = new ActiveXObject ...

  5. Network POJ - 3694 (连通图标求桥)

    有上述两个数组定义可知:对于某点root,其有一儿子v,则有: 1.     如果dfn[root]<=low[v]此点是割点(对于dfs树的根,即最初节点需要两个儿子才是割点) 2.      ...

  6. importlib 模块

    根据字符串的模块名实现动态导入模块的库 目录结构 ├── aaa.py ├── bbb.py └── mypackage ├── __init__.py └── xxx.py bbb.py impor ...

  7. tensorflow_mmp

    搭建win10+py3.6+cuda9.1+cudnn7+tf1.5(如果想知道为什么这么搭配,自己去装两天就知道了) tensorflow_gpu......whl下载 剩下的官网下载,cuda9. ...

  8. Python向来以慢著称,为啥Instagram却唯独钟爱它?

    PyCon 是全世界最大的以 Python 编程语言 为主题的技术大会,大会由 Python 社区组织,每年举办一次.在 Python 2017 上,Instagram 的工程师们带来了一个有关 Py ...

  9. luogu1377 树的序 (线段树)

    题意:给你一个1~N的排列,然后让你按顺序把它们插到一个二叉搜索树里,然后问能插出同样的二叉搜索树的 字典序最小的排列是什么 本来可以直接模拟建树然后dfs一下输出结果...然而有可能会退化成链,最差 ...

  10. 【codeforces 103E】 Buying Sets

    http://codeforces.com/problemset/problem/103/E (题目链接) 题意 给出$n$个数,每个数与一个集合相关联.从其中选出最小的若干个数,选出的数的个数与这些 ...