使用套接字的聊天程序

问题描述

学习C#时,在网络编程基础那一章,课本上讲了一个使用套接字的客户端与服务器端的聊天程序。其中窗体上都含有两个richtextbox控件,就像qq一样,一个是输入信息的,另一个是发送之后显示信息和接受信息的。我现在把richtextbox2中的字体颜色和大小设置好,但是发送之后在richtextbox1中显示的字体和颜色仍然是系统默认的,不是我在richtextbox2中所设置的那样,请各位帮忙指点一下

解决方案

解决方案二:
不用数据库,只用套接字这一块的只是能不能做到?
解决方案三:
你字体颜色信息也要通过socket传输过来的
解决方案四:
贴上你的代码看看
解决方案五:
用那个能行的!
解决方案六:
代码过几天给你!有待考虑!
解决方案七:
这是我的服务器端的代码:usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.Net;usingSystem.Net.Sockets;usingSystem.Threading;namespace聊天程序{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}privateIPAddressmyip=IPAddress.Parse("127.0.0.1");privateIPEndPointserver;privateSocketsesock;privateSocketresock;privateboolflag=true;privatevoidbutton1_Click(objectsender,EventArgse){try{myip=IPAddress.Parse(this.textBox1.Text);}catch{MessageBox.Show("IP地址输入有误!");}try{server=newIPEndPoint(myip,80);sesock=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);sesock.Bind(server);sesock.Listen(50);resock=sesock.Accept();Threadth=newThread(newThreadStart(tar));th.Start();}catch(Exceptionexcep){MessageBox.Show(excep.Message);}}privatevoidtar(){if(resock.Connected){while(flag){Byte[]rdata=newByte[64];resock.Receive(rdata,rdata.Length,0);stringstr=System.Text.Encoding.BigEndianUnicode.GetString(rdata);this.richTextBox1.AppendText(str+"n");}}}privatevoidbutton2_Click(objectsender,EventArgse){Byte[]sdata=newByte[64];stringss=this.textBox3.Text+""+DateTime.Now.ToString()+"n"+this.richTextBox2.Text+"n";sdata=System.Text.Encoding.BigEndianUnicode.GetBytes(ss.ToCharArray());resock.Send(sdata,sdata.Length,0);this.richTextBox1.AppendText(ss);this.richTextBox2.Clear();}privatevoidbutton5_Click(objectsender,EventArgse){FontDialogfont=newFontDialog();font.Color=this.richTextBox2.ForeColor;if(font.ShowDialog()==DialogResult.OK){this.richTextBox2.SelectionFont=font.Font;}}privatevoidbutton6_Click(objectsender,EventArgse){ColorDialogcolor=newColorDialog();if(color.ShowDialog()==DialogResult.OK){this.richTextBox2.SelectionColor=color.Color;}}privatevoidbutton3_Click(objectsender,EventArgse){Application.Exit();}privatevoidForm1_Load(objectsender,EventArgse){stringstr=Dns.GetHostName();IPAddress[]address=Dns.GetHostAddresses(str);for(inti=0;i<address.Length;i++){stringss=address[i].ToString();MessageBox.Show(ss);}}}}usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.Net;usingSystem.Net.Sockets;usingSystem.Threading;namespace聊天程序{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}privateIPAddressmyip=IPAddress.Parse("127.0.0.1");privateIPEndPointserver;privateSocketsesock;privateSocketresock;privateboolflag=true;privatevoidbutton1_Click(objectsender,EventArgse){try{myip=IPAddress.Parse(this.textBox1.Text);}catch{MessageBox.Show("IP地址输入有误!");}try{server=newIPEndPoint(myip,80);sesock=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);sesock.Bind(server);sesock.Listen(50);resock=sesock.Accept();Threadth=newThread(newThreadStart(tar));th.Start();}catch(Exceptionexcep){MessageBox.Show(excep.Message);}}privatevoidtar(){if(resock.Connected){while(flag){Byte[]rdata=newByte[64];resock.Receive(rdata,rdata.Length,0);stringstr=System.Text.Encoding.BigEndianUnicode.GetString(rdata);this.richTextBox1.AppendText(str+"n");}}}privatevoidbutton2_Click(objectsender,EventArgse){Byte[]sdata=newByte[64];stringss=this.textBox3.Text+""+DateTime.Now.ToString()+"n"+this.richTextBox2.Text+"n";sdata=System.Text.Encoding.BigEndianUnicode.GetBytes(ss.ToCharArray());resock.Send(sdata,sdata.Length,0);this.richTextBox1.AppendText(ss);this.richTextBox2.Clear();}privatevoidbutton5_Click(objectsender,EventArgse){FontDialogfont=newFontDialog();font.Color=this.richTextBox2.ForeColor;if(font.ShowDialog()==DialogResult.OK){this.richTextBox2.SelectionFont=font.Font;}}privatevoidbutton6_Click(objectsender,EventArgse){ColorDialogcolor=newColorDialog();if(color.ShowDialog()==DialogResult.OK){this.richTextBox2.SelectionColor=color.Color;}}privatevoidbutton3_Click(objectsender,EventArgse){Application.Exit();}privatevoidForm1_Load(objectsender,EventArgse){stringstr=Dns.GetHostName();IPAddress[]address=Dns.GetHostAddresses(str);for(inti=0;i<address.Length;i++){stringss=address[i].ToString();MessageBox.Show(ss);}}}}
解决方案八:
如果不连接数据库,只用sockets这一块的知识可以的话最好了,谢谢各位

时间: 2024-10-06 18:46:41

使用套接字的聊天程序的相关文章

如何编写简单的配合认证的基于JAVA套接字的通信程序

问题描述 我是一个初学者,现在正在编写一个配合认证的基于JAVA套接字的通信程序.老师要求:终端1和终端2要进行通信,必需通过第三台机器的简单认真.哪位高手帮帮忙吧!

《UNIX网络编程 卷1:套接字联网API(第3版)》——8.15 使用select函数的TCP和UDP回射服务器程序

8.15 使用select函数的TCP和UDP回射服务器程序 现在,我们把第5章中的并发TCP回射服务器程序与本章中的迭代UDP回射服务器程序组合成单个使用select来复用TCP和UDP套接字的服务器程序.图8-24是该程序的前半部分. 创建监听TCP套接字14~22 创建一个监听TCP套接字并捆绑服务器的众所周知端口,设置SO_REUSEADDR套接字选项以防该端口上已有连接存在. 创建UDP套接字23~29 还创建一个UDP套接字并捆绑与TCP套接字相同的端口.这里无需在调用bind之前设

基于多线程的客户端/服务器套接字类

这篇文章主要介绍如何设计基于多线程的客户端/服务器套接字(socket)类.开发者/设计者可以根据具体的 需要决定是否选用另外的线程.在网络上有许多其它的套接字类,但是没有一个能够向这个类一样为你的应用程序 提供回调功能(事件监测).本文设计的类能够为你提供如下的事件监测:完成建立链接.放弃链接.链接失败和 接收数据(包括0字节数据包). 描述: 本文提供一种新的,同时支持TCP和UDP通讯的套接字类,与你可能在本站或其它地方发现的套接字编程文章相 比,本文设计的类有很多优点.首先,这个类没有像

Linux下C语言多线程,网络通信简单聊天程序

原文:Linux下C语言多线程,网络通信简单聊天程序 功能描述:程序应用多线程技术,可是实现1对N进行网络通信聊天.但至今没想出合适的退出机制,除了用Ctr+C.出于演示目的,这里采用UNIX域协议(文件系统套接字),程序分为客户端和服务端.应用select函数来实现异步的读写操作. 先说一下服务端:首先先创建套接字,然后绑定,接下进入一个无限循环,用accept函数,接受"连接"请求,然后调用创建线程函数,创造新的线程,进入下一个循环.这样每当有一个新的"连接"被

Java套接字编程(上)

用Java开发网络软件非常方便和强大,Java的这种力量来源于他独有的一套强大的用于网络的 API,这些API是一系列的类和接口,均位于包java.net和javax.net中.在这篇文章中我们将介绍套接字(Socket)慨念,同时以实例说明如何使用Network API操纵套接字,在完成本文后,你就可以编写网络低端通讯软件. 什么是套接字(Socket)? Network API是典型的用于基于TCP/IP网络Java程序与其他程序通讯,Network API依靠Socket进行通讯.Sock

Linux下套接字详解(二)----套接字Socket

在前面我们讲了TCP/IP.TCP和UDP的一些基本知识,但是协议只有一套,而我们系统多个TCP连接或多个应用程序进程必须通过同一个 TCP协议端口传输数据.为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字(Socket)的接口. 套接口可以说是网络编程中一个非常重要的概念,linux以文件的形式实现套接口,与套接口相应的文件属于sockfs特殊文件系统,创建一个套接口就是在sockfs中创建一个特殊文件,并建立起为实现套接口功能的相关数据结构

Linux进程间通信——使用数据报套接字

前一篇文章,Linux进程间通信--使用流套接字介绍了一些有关socket(套接字)的一些基本内容,并讲解了流套接字的使用,这篇文章将会给大家讲讲,数据报套接字的使用.   一.简单回顾--什么是数据报套接字.   socket,即套接字是一种通信机制,凭借这种机制,客户/服务器(即要进行通信的进程)系统的开发工作既可以在本地单机上进行,也可以跨网络进行.也就是说它可以让不在同一台计算机但通过网络连接计算机上的进程进行通信.也因为这样,套接字明确地将客户端和服务器区分开来.   相对于流套接字,

Java套接字编程(上)(2)

Socket类 当客户程序需要与服务器程序通讯的时候,客户程序在客户机创建一个socket对象,Socket类有几个构造函数.两个常用的构造函数是 Socket(InetAddress addr, int port) 和 Socket(String host, int port),两个构造函数都创建了一个基于Socket的连接服务器端流套接字的流套接字.对于第一个InetAddress子类对象通过addr参数获得服务器主机的IP地址,对于第二个函数host参数包被分配到InetAddress对象

iOS - Socket 网络套接字

1.Socket 套接字 所谓 Socket,通常称为 "套接字",网络应用程序通过套接字向网络发送请求或者应答网络请求.Socket 通常用于描述 IP 地址和端口,是应⽤层与 TCP/IP 协议族通信的中间软件抽象层,它是一组接口,是一个通信链的句柄,可以用来实现不同虚拟机或者不同计算机之间的通信.在设计模式中,Socket 其实就是一个门面模式,它把复杂的 TCP/IP 协议族隐藏在 Socket 接⼝后面. Socket 起源于 Unix,而 Unix/Linux 基本哲学之一