TCP c/s模式实现点对点,一对多聊天 识别不同的TCP通道.给相应的TCP客户发送信息
2010-03-29 12:55
393 查看
客户端:
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.Sockets;
using System.Net;
using System.Threading;
namespace mytcpchat
{
public partial class Form1 : Form
{
private Thread th;
Socket c;
public Form1()
{
InitializeComponent();
Control.CheckForIllegalCrossThreadCalls = false;
}
private void Form1_Load(object sender, EventArgs e)
{
}
public void Client()
{
try
{
IPEndPoint ServerIPEP = new IPEndPoint(IPAddress.Parse(this.comboBox1.Text.Trim()), 5656);
c = new Socket(ServerIPEP.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
c.Connect((EndPoint)ServerIPEP);
c.Send(System.Text.Encoding.Default.GetBytes(this.sendmessage.Text.Trim()));
byte[] data = new byte[2048];
while (true)
{
int rect = c.Receive(data);
byte[] chat = new byte[rect];
Buffer.BlockCopy(data, 0, chat, 0, rect);
this.message.AppendText(System.Text.Encoding.Default.GetString(chat));
}
}
catch (Exception ex)
{
// MessageBox.Show(ex.Message);
}
}
private void button1_Click(object sender, EventArgs e)
{
try
{
th = new Thread(new ThreadStart(Client));//新建一个用于监听的线程
th.Start();//打开新线程
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}
服务端:
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.Sockets;
using System.Net;
using System.Threading;
using System.Collections;
namespace mytcpserver
{
public partial class Form1 : Form
{
Socket s;
IPEndPoint ServerIPEP;
private Thread th;
Socket uc;
private ArrayList alSock;//
public Form1()
{
InitializeComponent();
Control.CheckForIllegalCrossThreadCalls = false;
}
public void Server()
{
int port = 5656;
ServerIPEP = new IPEndPoint(IPAddress.Any, port);
s = new Socket(ServerIPEP.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
s.Bind((EndPoint)ServerIPEP);
s.Listen(10);
alSock = new ArrayList();
while (true)
{
try
{
uc = s.Accept();
alSock.Add(uc);
this.textBox1.AppendText(System.Convert.ToString(uc));
byte[] data = new byte[2048];
int rect = uc.Receive(data);
byte[] chat = new byte[rect];
Buffer.BlockCopy(data, 0, chat, 0, rect);
this.mymessage.AppendText("["+uc.RemoteEndPoint.ToString() +"]"+ System.Text.Encoding.Default.GetString(chat));
}
catch (Exception ex)
{
// MessageBox.Show(ex.Message);
}
}
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
this.button1.Enabled = false;
this.button2.Enabled = true;
th = new Thread(new ThreadStart(Server));//新建一个用于监听的线程
th.Start();//打开新线程
}
private void button2_Click(object sender, EventArgs e)
{
try
{
this.button2.Enabled = false;
this.button1.Enabled = true;
s.Close();
th.Abort();//终止线程
}
catch (Exception ex)
{
// MessageBox.Show(ex.Message);
}
}
private void button3_Click(object sender, EventArgs e)
{
if (uc == null)
{
MessageBox.Show("你不能和任何人进行聊天,请告诉服务器进行聊天请求");
}
else
{
int index = int.Parse(this.textBox2.Text.Trim());
Socket sc = (Socket)alSock[index];
//发送数据
sc.Send(System.Text.Encoding.Default.GetBytes(this.answermessage.Text.Trim()));
}
}
}
}
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.Sockets;
using System.Net;
using System.Threading;
namespace mytcpchat
{
public partial class Form1 : Form
{
private Thread th;
Socket c;
public Form1()
{
InitializeComponent();
Control.CheckForIllegalCrossThreadCalls = false;
}
private void Form1_Load(object sender, EventArgs e)
{
}
public void Client()
{
try
{
IPEndPoint ServerIPEP = new IPEndPoint(IPAddress.Parse(this.comboBox1.Text.Trim()), 5656);
c = new Socket(ServerIPEP.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
c.Connect((EndPoint)ServerIPEP);
c.Send(System.Text.Encoding.Default.GetBytes(this.sendmessage.Text.Trim()));
byte[] data = new byte[2048];
while (true)
{
int rect = c.Receive(data);
byte[] chat = new byte[rect];
Buffer.BlockCopy(data, 0, chat, 0, rect);
this.message.AppendText(System.Text.Encoding.Default.GetString(chat));
}
}
catch (Exception ex)
{
// MessageBox.Show(ex.Message);
}
}
private void button1_Click(object sender, EventArgs e)
{
try
{
th = new Thread(new ThreadStart(Client));//新建一个用于监听的线程
th.Start();//打开新线程
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}
服务端:
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.Sockets;
using System.Net;
using System.Threading;
using System.Collections;
namespace mytcpserver
{
public partial class Form1 : Form
{
Socket s;
IPEndPoint ServerIPEP;
private Thread th;
Socket uc;
private ArrayList alSock;//
public Form1()
{
InitializeComponent();
Control.CheckForIllegalCrossThreadCalls = false;
}
public void Server()
{
int port = 5656;
ServerIPEP = new IPEndPoint(IPAddress.Any, port);
s = new Socket(ServerIPEP.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
s.Bind((EndPoint)ServerIPEP);
s.Listen(10);
alSock = new ArrayList();
while (true)
{
try
{
uc = s.Accept();
alSock.Add(uc);
this.textBox1.AppendText(System.Convert.ToString(uc));
byte[] data = new byte[2048];
int rect = uc.Receive(data);
byte[] chat = new byte[rect];
Buffer.BlockCopy(data, 0, chat, 0, rect);
this.mymessage.AppendText("["+uc.RemoteEndPoint.ToString() +"]"+ System.Text.Encoding.Default.GetString(chat));
}
catch (Exception ex)
{
// MessageBox.Show(ex.Message);
}
}
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
this.button1.Enabled = false;
this.button2.Enabled = true;
th = new Thread(new ThreadStart(Server));//新建一个用于监听的线程
th.Start();//打开新线程
}
private void button2_Click(object sender, EventArgs e)
{
try
{
this.button2.Enabled = false;
this.button1.Enabled = true;
s.Close();
th.Abort();//终止线程
}
catch (Exception ex)
{
// MessageBox.Show(ex.Message);
}
}
private void button3_Click(object sender, EventArgs e)
{
if (uc == null)
{
MessageBox.Show("你不能和任何人进行聊天,请告诉服务器进行聊天请求");
}
else
{
int index = int.Parse(this.textBox2.Text.Trim());
Socket sc = (Socket)alSock[index];
//发送数据
sc.Send(System.Text.Encoding.Default.GetBytes(this.answermessage.Text.Trim()));
}
}
}
}
相关文章推荐
- TCP c/s模式实现点对点,一对多聊天 识别不同的TCP通道.给相应的TCP客户发送信息
- Qt实用技巧:基于tcp的C/S构架多人聊天程序(在线、离线、离线信息再次登录后发送等)
- Qt中利用TCP实现多个客户端之间相互发送消息系以及服务器的群发信息
- 利用TCP实现多客户聊天系统
- 集成网易云信实现自定义消息(类似淘宝聊天发送商品信息)
- angularJS实现聊天窗口中发送和接收信息时,将聊天记录窗口滑动条实时滑至底部
- 用TCP实现多客户聊天系统
- java在线聊天项目0.3版本 制作客户端窗体,实现发送按钮和回车发送信息功能,使用ActionListener监听事件中actionPerformed方法(用内部类和匿名内部类两种方法)
- 使用Pushlet实现后台信息推送(二)-点对点发送
- 修改例子,TCP服务器和客户端,加入线程的概念,实现单方多次发送信息
- 用socket来写一个聊天软件吧(三)实现发送不同的消息
- 前端控制器是整个MVC框架中最为核心的一块,它主要用来拦截符合要求的外部请求,并把请求分发到不同的控制器去处理,根据控制器处理后的结果,生成相应的响应发送到客户端。前端控制器既可以使用Filter实现(Struts2采用这种方式),也可以使用Servlet来实现(spring MVC框架)。
- 关于linux下的udp/tcp通信设置发送sendto/接收recvfrom信息超时的参数。解决通道堵塞问题。
- Qt中利用TCP实现多个客户端之间相互发送消息系以及服务器的群发信息
- python+soket实现 TCP 协议的客户/服务端中文(自动回复)聊天程序
- 用VB实现客户——服务器(TCP/IP)编程实例
- Android利用Socket(TCP)通信实现即时聊天
- ListView、RecyclerView 两种方式实现聊天界面支持文字、表情、图片和语音信息,支持下拉加载更多
- 利用TCP和UDP协议,实现基于Socket的小聊天程序
- 分布式编程->Remoting的一个代码示例(借助Remoting实现发送信息功能)