WPF使用socket实现简单聊天软件
公司网络限制不能传文件,先贴部分代码
控件添加到界面就行,界面随意布局
项目结构:
1.解决方案
1.1. Client
1.2. Server
Client:
<Window x:Class="CSharpSocketExample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="375" Width="524">
<Grid Margin="0,0,2,-20">
<Button Name="btn_connection" Content="发送" HorizontalAlignment="Left" Margin="292,288,0,0" VerticalAlignment="Top" Width="75" Click="btn_connection_Click"/>
<TextBlock Name="tblock_message" HorizontalAlignment="Left" Margin="34,10,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Height="208" Width="464"/>
<Button Name="btn_refresh" Content="刷新" HorizontalAlignment="Left" Margin="292,244,0,0" VerticalAlignment="Top" Width="75" Click="btn_refresh_Click"/>
<Label Content="昵称" HorizontalAlignment="Left" Margin="34,244,0,0" VerticalAlignment="Top"/>
<TextBox x:Name="tb_username" HorizontalAlignment="Left" Height="23" Margin="92,247,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="136"/>
<Label Content="消息" HorizontalAlignment="Left" Margin="34,284,0,0" VerticalAlignment="Top"/>
<Button Name="btn_clear" Content="清屏" HorizontalAlignment="Left" Margin="401,244,0,0" VerticalAlignment="Top" Width="75" Click="btn_clear_Click"/>
private void btn_connection_Click(object sender, RoutedEventArgs e)
{
int port = ;
string host = "127.0.0.1";
IPAddress ip = IPAddress.Parse(host);
IPEndPoint ipe = new IPEndPoint(ip, port);
Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
clientSocket.Connect(ipe);
//send message
string sendStr =tb_username.Text + ": " + tb_message.Text;
byte[] sendBytes = Encoding.UTF8.GetBytes(sendStr);
clientSocket.Send(sendBytes);
//receive message
string recStr = "";
byte[] recBytes = new byte[];
int bytes = clientSocket.Receive(recBytes, recBytes.Length, );
recStr += Encoding.UTF8.GetString(recBytes, , bytes);
tblock_message.Text = recStr;clientSocket.Close();
}
private void btn_refresh_Click(object sender, RoutedEventArgs e)
{
int port = ;
string host = "127.0.0.1"; IPAddress ip = IPAddress.Parse(host);
IPEndPoint ipe = new IPEndPoint(ip, port);
Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
clientSocket.Connect(ipe);
//send message
string sendStr = "refresh";
byte[] sendBytes = Encoding.UTF8.GetBytes(sendStr);
clientSocket.Send(sendBytes);//receive message
string recStr = "";
byte[] recBytes = new byte[];
int bytes = clientSocket.Receive(recBytes, recBytes.Length, );
recStr += Encoding.UTF8.GetString(recBytes, , bytes);
tblock_message.Text = recStr;
clientSocket.Close();
}
Server:
namespace Server
{
class Program
{
static void Main(string[] args)
{
int port = ;
string host = "127.0.0.1"; IPAddress ip = IPAddress.Parse(host);
IPEndPoint ipe = new IPEndPoint(ip, port); Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Bind(ipe);
socket.Listen();
Console.WriteLine("Listen Server Open."); string history = ""; while (true)
{
//receive message
Socket serverSocket = socket.Accept();
Console.WriteLine("Connection Successful.");
history += "\r"; string history = ""; while (true)
{
//receive message
Socket serverSocket = socket.Accept();
Console.WriteLine("Connection Successful.");
history += "\r"; string recStr = "";
byte[] recByte = new byte[];
int bytes = serverSocket.Receive(recByte, recByte.Length, );
recStr += Encoding.UTF8.GetString(recByte, , bytes); if (recStr != "refresh")
{
history += recStr;
} //send message
Console.WriteLine("Receive Message:{0}", recStr); string sendStr = history.ToString();
byte[] sendByte = Encoding.UTF8.GetBytes(sendStr); serverSocket.Send(sendByte, sendByte.Length, );
serverSocket.Close();
//socket.Close();
WPF使用socket实现简单聊天软件的更多相关文章
- Java实现 简单聊天软件
简单的聊天软件 //客户端 package yjd9; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; ...
- C#基于Socket的简单聊天室实践
序:实现一个基于Socket的简易的聊天室,实现的思路如下: 程序的结构:多个客户端+一个服务端,客户端都是向服务端发送消息,然后服务端转发给所有的客户端,这样形成一个简单的聊天室功能. 实现的细节: ...
- 关于Socket编写简单聊天工具的总结(原创)
这段时间再看socket编程,虽然现在是刚刚接触,但是还是忍不住想写一篇总结,来激励自己努力学习,写的不好的地方,还请大家指教啊! 下面针对一个简单的发送消息和文件的程序说说吧. 首先是服务器需要 ...
- Socket实现简单聊天
服务端: package main.java.com.socket_dome; import java.io.IOException; import java.io.InputStream; impo ...
- python练习四—简单的聊天软件
python最强大的是什么?库支持!!有了强大的库支持,一个简单的聊天软件实现就更简单了,本项目思路如下 # 项目思路 1. 服务器的工作 * 初始化服务器 * 新建一个聊天房间 * 维护一个已链接用 ...
- Socket实现简单的聊天通信
最近学习了Socket后,感觉Socket挺好玩的,在博客中看到socket在实时聊天功能的很强大,于是乎就做了一个简单的聊天功能,今天贴出来,能够与大家一起共享,有不对之处,能够给予指出,谢谢! 服 ...
- Python Socket 简单聊天室2
上篇文章写了一个简单的单线程的一问一答的简单聊天室.这次我们使用SocketServer模块搭建一个多线程异步的聊天室. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...
- java Socket实现简单在线聊天(二)
接<java Socket实现简单在线聊天(一)>,在单客户端连接的基础上,这里第二步需要实现多客户端的连接,也就需要使用到线程.每当有一个新的客户端连接上来,服务端便需要新启动一个线程进 ...
- java Socket实现简单在线聊天(一)
最近的项目有一个在线网页交流的需求,由于很久以前做过的demo已经忘记的差不多了,因此便重新学习一下. 我计划的大致实现步骤分这样几大步: 1.使用awt组件和socket实现简单的单客户端向服务端持 ...
随机推荐
- 如何利用 Visual Studio 自定义项目或工程模板(转载)
在开发项目的时候,由其是商业性质的大型项目时,往往需要在每个代码文件上都加上一段关于版权.开发人员的信息,并且名称空间上都需要带有公司的标志.这个时候,是选择在开发的时候手动添加还是自动生成呢? 我们 ...
- MySQL -- Innodb是如何处理自增列的
对于那些向带有自增列的表中插入行的语句,Innodb提供一种可配置的锁定机制,这种锁定机制可以显著提高SQL语句的可伸缩性和性能. Innodb中为了使用自增机制,自增列必须是索引的部份,从而可以使用 ...
- ekho安装及测试(中文文字转语音)
1. 官网下载源码包 地址:http://www.eguidedog.net/ekho.php 2. 安装 xz -d ekho-7.5.tar.xz tar -xvf ekho-7.5.tar ap ...
- Java 8 – StringJoiner example
In this article, we will show you a few StringJoiner examples to join String. 1. StringJoiner1.1 Joi ...
- C#基础第五天-作业-用DataTable制作名片集
1.用DataTable集合去实现名片集.(增加,修改,删除,查询,查询全部)需求:根据人名去(删除/查询).指定列:姓名,年龄,性别,爱好,电话. 本系列教程: C#基础总结之八面向对象知识点总结- ...
- laravel5.7的redis配置,一直报错Class 'Predis\Client' not found
laravel5.7的redis配置,一直报错Class 'Predis\Client' not found 首先我检查了配置,和composer 都没有错,用原生的redis也可以正常连接和读写. ...
- 关于java代码提交HTTP POST请求中文乱码的解决方法
首先说明下这些只是根据我工作常用经验的总结,可能不一定完全对,也不一定全面,但却是最通用的. JAVA里HTTP提交方式 httpurlconnection:jdk里自带的 httpclient:ap ...
- 【Android UI】Android颜色系大全
原文:http://android.eoe.cn/topic/summary 利用颜色的变化来突出信息.选择契合您应用主题的颜色系,并且提供视觉对比效果.注意,色弱的人士可能无法分辨红色和绿色. 调色 ...
- hdu-2045 递归
#include <cstdio> #include <iostream> using namespace std; long long a[55] = {0,3,6}; lo ...
- Atitti cto的日常流程与职责attilax总结
Atitti cto的日常流程与职责attilax总结 1. (最重要)技术战略制定 规划,预测趋势1 1.1. 关键词 Throught技术雷达 趋势 没落 已死 辉煌 未来1 1.2. (比较 ...