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 = 6000;
            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[4096];
            int bytes = clientSocket.Receive(recBytes, recBytes.Length, 0);
            recStr += Encoding.UTF8.GetString(recBytes, 0, bytes);
            tblock_message.Text = recStr;clientSocket.Close();
        }
        private void btn_refresh_Click(object sender, RoutedEventArgs e)
        {
            int port = 6000;
            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[4096];
            int bytes = clientSocket.Receive(recBytes, recBytes.Length, 0);
            recStr += Encoding.UTF8.GetString(recBytes, 0, bytes);
            tblock_message.Text = recStr;
            clientSocket.Close();
        }

Server:

namespace Server
{
    class Program
    {
        static void Main(string[] args)
        {
            int port = 6000;
            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(0);
            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[4096];
                int bytes = serverSocket.Receive(recByte, recByte.Length, 0);
                recStr += Encoding.UTF8.GetString(recByte, 0, 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, 0);
                serverSocket.Close();
                //socket.Close();
时间: 2024-12-11 06:05:53

WPF使用socket实现简单聊天软件的相关文章

关于Socket编写简单聊天工具的总结(原创)

这段时间再看socket编程,虽然现在是刚刚接触,但是还是忍不住想写一篇总结,来激励自己努力学习,写的不好的地方,还请大家指教啊! 下面针对一个简单的发送消息和文件的程序说说吧.   首先是服务器需要准备二个Socket和二个Thread如下: //和客户机进行通信 private Socket sckCommit; //监听客户机 private Socket sckListen; private Thread thdListen; private Thread thdCommit; 对客户机

Java实现 简单聊天软件

简单的聊天软件 //客户端 package yjd9; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.*; import java.net.Socket; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.*; public class MyClien

Java系列讲座二:Socket网络通信实现聊天软件项目讲解(UDP)

上一篇我们讲了通过TCP方式实现网络通信软件开发的原理,思路及实现,今天跟大家谈谈Socket通信中UDP方式通信的软件开发步骤及主要代码讲解,UDP实现方式实现的通信软件特点是不分客户端与服务器端,一个程序既是客户端与是服务器端,典型软件是一些局域网的聊天软件,如飞鸽等软件. UDP方式通信主要用到了java.net包中的3个类分别是DatagramPacket类,DatagramSocket类与InetAddress类,下面通过实现一个简易聊天软件小项目来讲解他们的使用方法,代码如下: pa

使用socket实现简单聊天室

通过socket实现简单的聊天室 1.服务端代码:serverselect.py #!/usr/bin/env python #coding:utf8 import socket import select class SelectServer(object): def __init__(self,host,port,backlog): self.host = host self.prot = port self.address = (host,port) self.backlog = back

Python--网络编程-----socket代码实例--聊天软件升级版

服务端代码: 1 import socket 2 3 HOST = '' 4 PORT = 50007 5 6 sock_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 7 sock_server.bind((HOST, PORT)) 8 9 sock_server.listen(1) 10 11 while True: 12 conn, addr = sock_server.accept() 13 14 with conn:

Socket实现简单聊天

服务端: package main.java.com.socket_dome; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; public class LoginServer { public static void

Python开发双工聊天软件

需求: 1.用Socket开发双工聊天软件,服务端与客户端交互 2.聊天记录要记录到MySQL数据库 3.客户端可以查看聊天记录 4.用三层架构开发 程序架构 各文件作用解析 - model              model层 - dialogue.py        dialoue表 - users.py          users表 - utility             公共层 - sql_helper.py       公共配置文件 - client.py         客户

linux下基于socket的聊天软件

近期学习linux socket编程.看看unp那本书.顺便写了个类似最简单聊天功能的软件.界面是用qt写的.写下来总结总结吧,假设有问题.欢迎大家和我交流. 模式是C/S模式,server端等待请求.client发送后建立请求.连接用的是tcp不是udp,事实上udp实现更为简单. 一. 环境搭建 我用docker搭了几个虚拟机,详细搭建方式能够參考网上的或我之前写docker的总结:点击打开链接 docker还是非常轻量级的,比一般虚拟机起的快多了. 搭建好docker以后就是主要的先看网络

python练习四—简单的聊天软件

python最强大的是什么?库支持!!有了强大的库支持,一个简单的聊天软件实现就更简单了,本项目思路如下 # 项目思路 1. 服务器的工作 * 初始化服务器 * 新建一个聊天房间 * 维护一个已链接用户的会话列表 * 维护一个已登录用户的字典,用户名和会话 * 监听端口,接受会话,并启动一个ChatSession处理 2. 会话线程 * 初始化一个接收数据缓冲区 * 处理用户输入的命令,并提醒用户先登录(也就是说目前指处理登陆命令) * 将用户输入的数据加入缓冲区 * 用户一次输入结束后,将缓冲