java与c#使用Socket实现局域网聊天
来源:互联网 发布:淘宝网警用手铐脚铐 编辑:程序博客网 时间:2024/06/10 01:31
先运行一个java写的局域网聊天,效果图如下
后使用c#图形修改如下:
c#代码:
servlet服务端
using System;using System.Collections.Generic;using System.Drawing;using System.Windows.Forms;using System.Net;using System.Net.Sockets;using System.Threading;using System.IO;using System.Text;using System.Text.RegularExpressions;namespace Server{public partial class MainForm : Form{private TcpListener listener;private Dictionary<String,TcpClient> socketList;private bool tag = true;private StringBuilder charList;public MainForm(){InitializeComponent();Control.CheckForIllegalCrossThreadCalls = false;}void Bu_StartClick(object sender, EventArgs e){cb_chatList.Items.Clear();selectChat.Text="";int port = 8888;//创建服务端,并且启动try{listener = new TcpListener(IPAddress.Parse(ipAddress()),port);listener.Start();bu_Start.Enabled = false;bu_stop.Enabled = true;}catch(Exception ex){MessageBox.Show("服务器启动失败, 原因:"+ex.Message);bu_Start.Enabled = true;bu_stop.Enabled = false;return;}selectChat.Text = "服务器启动成功,访问IP:"+ipAddress()+" 端口号:"+port;//记录住连接的客户端socketList = new Dictionary<String,TcpClient>();charList = new StringBuilder();//使用多线程,用于多个客户端接入Thread th = new Thread(new ThreadStart(executeTask));th.Start();}public void executeTask(){while(tag){//等待用户连接TcpClient client = null;try{client = listener.AcceptTcpClient();}catch(Exception){}Thread th = new Thread(executeRead);th.Start((Object)client);}}public void executeRead(Object pamars){//永久监听读取客户端TcpClient client = pamars as TcpClient;while(tag){NetworkStream ns = client.GetStream();StreamReader sr = new StreamReader(ns);String msg = String.Empty;String people = String.Empty;try {msg = sr.ReadLine();if(msg.IndexOf("<clientName>")!=-1){msg = Regex.Split(msg,"=")[1]; cb_chatList.Items.Add(msg); charList.Append(msg).Append("<@>");socketList.Add(msg,client);msg = "<br>欢迎【"+msg+"】光临<br>";}selectChat.AppendText(msg.Replace("<br>","\r\n"));sendMsg(String.Empty,msg);} catch (Exception) {//MessageBox.Show(ex.Message.ToString());break;}}}public void sendMsg(String target,String msg){if(String.Empty!=target){TcpClient client = socketList[target];StreamWriter sw = new StreamWriter(client.GetStream());sw.WriteLine(msg);sw.Flush();}else{Dictionary<String,TcpClient>.KeyCollection keyColl = socketList.Keys;foreach (String name in keyColl) {StreamWriter sw = new StreamWriter(socketList[name].GetStream());sw.WriteLine(msg+"<@=@>"+charList.ToString());sw.Flush();}}}/*根据计算名获取IP地址*/public String ipAddress(){IPAddress[] address = Dns.GetHostAddresses(Dns.GetHostName());return address[2].ToString();}void ServerFromFormClosing(object sender, FormClosingEventArgs e){e.Cancel = false;if(tag)tag = false;if(listener!=null)listener.Stop();}void Bu_stopClick(object sender, EventArgs e){bu_Start.Enabled = true;bu_stop.Enabled = false;if(tag)tag = false;if(listener!=null)listener.Stop();}}}
using System;using System.Drawing;using System.Windows.Forms;using System.Threading;using System.Net;using System.Net.Sockets;using System.IO;using System.Text;using System.Text.RegularExpressions;namespace Client{public partial class MainForm : Form{private System.Windows.Forms.Timer closeWindowTimer;private StreamReader sr;private StreamWriter sw;private TcpClient tc;private ClientLong cl;private bool tag = true;public MainForm(TcpClient tcp,ClientLong clo){cl = clo;tc = tcp;InitializeComponent();Control.CheckForIllegalCrossThreadCalls = false;bu_simple.Hide();}void ClientFromLoad(object sender, EventArgs e){PiayCheckedChanged();} /*事件方法*/ public void PiayCheckedChanged() { closeWindowTimer = new System.Windows.Forms.Timer(); closeWindowTimer.Interval = 1000; closeWindowTimer.Tick += new EventHandler(theout); closeWindowTimer.Start(); } /*执行的事件*/ public void theout(object source, EventArgs e) { //这里单独开一个线程用来显示信息 try{ Thread t1 = new Thread(new ThreadStart(readMsg)); t1.Start(); }catch(Exception) { } } void readMsg() { if(tag && tc!=null){ sr = new StreamReader(tc.GetStream()); String msg = sr.ReadLine(); String[] address = Regex.Split(msg,"<@=@>"); chatText.AppendText(address[0].Replace("<br>","\r\n")); address = Regex.Split(address[1],"<@>"); cb_chatList.Items.Clear(); foreach (String s in address) { if(!String.IsNullOrEmpty(s) && s != cl.clientName) cb_chatList.Items.Add(s); } } }void Button1Click(object sender, EventArgs e){if(String.IsNullOrEmpty(textBox2.Text)){MessageBox.Show("请输入消息");return;}sw = new StreamWriter(tc.GetStream());sw.WriteLine("<br>"+cl.clientName+" "+DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")+"<br> "+textBox2.Text);textBox2.Text = "";sw.Flush();}void Bu_exitClick(object sender, EventArgs e){MainFormFormClosing(null,null);}void Button2Click(object sender, EventArgs e){chatText.Text = "";}void MainFormFormClosing(object sender, FormClosingEventArgs e){closeWindowTimer.Stop();cl.Close();tag = false;if(sr!=null)sr.Close();if(sw!=null)sw.Close();}void Bu_simpleClick(object sender, EventArgs e){String selected = cb_chatList.Text;if(selected==null){MessageBox.Show("请选择单聊对象");return;}}}}
补充:
1:上传下载文件、聊天表情、私聊、踢人.......都是可以扩展的功能。
只是目前还没有可执行的思路,希望有相同爱好者多多提出宝贵意见。我会继续关注。
1 0
- java与c#使用Socket实现局域网聊天
- java socket 局域网聊天
- JAVA实现局域网聊天
- 利用java socket实现多线程局域网聊天应用
- C# Socket实现聊天通信
- C# socket 局域网聊天程序的一点心得
- Java实现局域网聊天软件分享
- Java实现局域网聊天软件分享
- 使用Socket实现简单聊天
- java Socket简单聊天实现
- 使用socket与线程实现简单机器人聊天
- 局域网java Socket 使用代理
- socket编程实现的多人局域网聊天(udp)多线程
- 使用Java Socket实现简单的聊天功能
- C#的局域网聊天软件的简单实现
- [java]局域网简易聊天
- [java]局域网简易聊天
- 利用socket实现客户端与服务器端聊天
- 嵌入式 hi3518a平台多编码通道同时绑定OSD实现以及反色实现
- OCP-1Z0-051-题目解析-第33题
- 百度编辑器ueditor的简单使用
- File
- select()函数以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET
- java与c#使用Socket实现局域网聊天
- 程序猿笑话,放松一下
- HDU1180 诡异的楼梯
- IO功能类
- iOS学习之Table View的简单使用
- colinux的安装与网络配置
- 牛奶加热应注意什么
- Perl script 扫描指定文件夹replace string
- c++ 使用socket实现C/S端文件的下载传输