服务端using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
namespace Sockets
{
public partial class ServerForm : Form
{
Socket s = null;
IPEndPoint iep = null;
byte[] buf = new byte[1024];
Socket worker = null;
public ServerForm()
{
InitializeComponent();
Control.CheckForIllegalCrossThreadCalls = false;
}
private void button1_Click(object sender, EventArgs e)
{
//创建一个通道
s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//创建一个侦听点
iep = new IPEndPoint(IPAddress.Any, 20000);
//绑定到通道上
s.Bind(iep);
//侦听
s.Listen(6);
//通过异步来处理
s.BeginAccept(new AsyncCallback(Accept), s);
this.button1.Visible = false;
}
void Accept(IAsyncResult ia)
{
s = ia.AsyncState as Socket;
//worker = s.EndAccept();
worker = s.EndAccept(ia);
s.BeginAccept(new AsyncCallback(Accept), s);
try
{
worker.BeginReceive(buf, 0, buf.Length,SocketFlags.None, new AsyncCallback(Receive), worker);
}
catch
{ throw; }
}
void Receive(IAsyncResult ia)
{
worker = ia.AsyncState as Socket;
int count = worker.EndReceive(ia);
worker.BeginReceive(buf, 0, buf.Length, SocketFlags.None, new AsyncCallback(Receive), worker);
string context = Encoding.GetEncoding("gb2312").GetString(buf, 0, count);
this.textBox1.Text += Environment.NewLine;
this.textBox1.Text += context;
}
private void button2_Click(object sender, EventArgs e)
{
string context = "XXXXX" + this.textBox2.Text.Trim();
if (context != "")
{
this.textBox1.Text += Environment.NewLine;
this.textBox1.Text += context;
this.textBox2.Text = "";
worker.Send(Encoding.GetEncoding("gb2312").GetBytes(context));
}
}
private void ServerForm_Load(object sender, EventArgs e)
{
}
}
}
客户端
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
namespace Sockets
{
public partial class ClientForm : Form
{
Socket s = null;
IPEndPoint iep = null;
byte[] buf = new byte[1024];
public ClientForm()
{
InitializeComponent();
Control.CheckForIllegalCrossThreadCalls = false;
}
private void button1_Click(object sender, EventArgs e)
{
s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
iep = new IPEndPoint(IPAddress.Parse("192.168.10.131"), 20000);
try
{
s.Connect(iep);
this.label1.Text = "连接成功";
this.button1.Visible = false;
}
catch
{ throw; }
}
private void button2_Click(object sender, EventArgs e)
{
string context = iep.ToString() + ":" + this.textBox2.Text.Trim();
if (context != "")
{
this.textBox1.Text += Environment.NewLine;
this.textBox1.Text += context;
this.textBox2.Text = "";
s.Send(Encoding.GetEncoding("gb2312").GetBytes(context));
try
{
s.BeginReceive(buf, 0, buf.Length, SocketFlags.None, new AsyncCallback(Receive), s);
}
catch
{ throw; }
}
}
void Receive(IAsyncResult ia)
{
s = ia.AsyncState as Socket;
int count = s.EndReceive(ia);
s.BeginReceive(buf, 0, buf.Length, SocketFlags.None, new AsyncCallback(Receive), s);
string context = Encoding.GetEncoding("gb2312").GetString(buf, 0, count);
this.textBox1.Text += Environment.NewLine;
this.textBox1.Text += context;
}
private void ClientForm_Load(object sender, EventArgs e)
{
}
}
}
分享到:
相关推荐
Java Socket编写的聊天室,有用到多线程、Socket、输入输出流等相关知识。是个综合实例。局域网内多人聊天,类似qq群。
利用C#SOCKET写的类似聊天室的支持多客户端的通信程序,包括服务器端和客户端源代码
SOCKET简单聊天实例.rar 初学TCP SOCKET的程序员一定要先研究一下
使用java编写的类似聊天室的程序,在上次的基础上继续改进,将服务器端的IP地址写在配置文件里面,是程序的使用更加灵活,server.properties文件为配置文件,修改里面的ip地址为服务器端运行的ip地址即可使用。...
在TCP/IP网络通信环境下,Socket数据传输是一种特殊的I/O,它也相当于一种文件描述符,具有一个类似于打开文件的函数调用-socket()。可以这样理解:Socket实际上是一个通信端点,通过它,用户的Socket程序可以通过...
基于socket的局域网聊天室程序 源代码,包含登录注册添加好友、一对多,一对一和查看聊天记录功能,类似一个小型qq,含客户端和服务端两部分。 运行时注意修改端口,还有本例用到数据库,注意环境配置
聊天程序 JavaSocket编程,类似QQ的聊天程序(注册、登陆、聊天等) 1、界面模仿QQ界面,能够发起一对一聊天、接受聊天请求; 2、能够以当前日期和时间(精确到分)命名的文件来保持聊天记录; 3、能够调出聊天记录...
先启动服务器程序,弹出服务器初始化窗口,输入端口号,然后单击确定,弹出服务器的主窗口。接着启动客户端程序,弹出客户端登录...在客户端输入信息,按发送,就可以在服务器显示出来,这就实现了一个聊天的基本功能。
类似socket中的listen。 Accept:可使用 Socket 或 TcpClient 来连接 TcpListener。 Stop():关闭侦听器。 至于Send和Receive,则由NetworkStream进行处理。 2.TcpClient(为 TCP 网络服务提供客户端连接) Connect:...
资源包含了:Java课程的6次小实验、综合设计基于Socket的聊天软件 的代码和文档。实验一(斐波那契数列)、实验二(类及其封装)、实验三(各种异常处理)、实验四(图形化设计_计算器)...2、多人聊天(类似QQ群聊)。
使用多线程,Socket指定IP地址通讯(类似聊天软件) 可以进行一对一的聊天,通讯的 C#源代码示例
这个实例是一个完整的使用Socket实现的聊天(只限于局域网,如果能提供一个高权限的IP就可以实现类似QQ聊天),其中的原理是:首先开启服务端,打开侦听(任何端口为6600的IP)
笔者很久之前其实就已经学习过了socket,当然也是用socket做过了聊天室,但是觉得此知识点比较一般,并无特别难的技术点,于是也并未深究。 然而近期一个项目中对socket的使用却让笔者感觉socket强大无比,可以实现...
自己编网络聊天程序,运用了Socket和进程通信,仅供参考 压缩包里包含了:源码+可执行程序。
类似于QQ的局域网聊天软件,包括服务器端和客户端程序,采用tcp/ip socket多线程编程,服务器端主要负责客户端用户的注册登陆,用户资料的获取.客户端负责与其他客户端进行信息控制与传递(包括聊天和传送文件).
基于socket的多人聊天室。类似qq群聊。界面使用java swing编写
getWanWork作socket服务(socket 数据交互方式是二进制数据格式)。 redis缓存,特定模块用sqllite缓存模块数据。 mysql、mongodb 数据库。 JWT进行用户验证。 使用 http 进行发送文件 双端: 带有双端app源码...
服务端开启多线程监听客户端,如果服务端收到客户端发过来的请求,服务端就会把某个机器输过来的信息进行转播出去,发给所有客户端,并带上Ip,所有客户端的控制台就可以看到某人说了什么话,类似一个局域网群聊,...
本资料提供的是用Socket编程实现聊天程序。 有两种:流式Socket(SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。流式是一种面向连接的Socket,针对于面向连接的TCP服务应用;数据报式Socket是一种无连接的Socket,...
该代码在Linux实现了一个类似于windows上的QQ的聊天工具。主要是基于TCP/IP协议的socket通信。包括服务器端和客户端两部分,其中客户端使用了select的IO多路复用技术,服务器端由于要监听多个客户端,因此使用了...