基于TCP的多线程聊天室实现讲解
TCP协议的多线程并发设计与实现方法(十)

TCP协议的多线程并发设计与实现方法1. 引言TCP(Transmission Control Protocol)作为一种面向连接的协议,常用于互联网通信。
在网络通信过程中,多线程并发设计能够提高系统的响应速度和并发处理能力,使网络通信更加高效。
本文将探讨TCP协议的多线程并发设计与实现方法。
2. TCP协议及其特点TCP协议是一种可靠的、面向字节流的传输协议。
与UDP协议相比,TCP协议具有以下特点:- 可靠性:TCP协议通过序列号、确认应答和重传机制确保数据的可靠传输。
- 面向连接:进行数据传输之前,TCP协议需要经过三次握手建立连接的过程,确保通信双方能够正常交换数据。
- 流量控制:TCP协议通过滑动窗口的机制来控制数据的发送和接收速度,避免数据丢失和拥塞。
- 拥塞控制:TCP协议使用拥塞窗口和慢启动等算法来避免网络拥塞,保证网络的稳定性。
3. 单线程方式实现TCP通信在单线程方式下,TCP通信的过程如下:- 服务器端监听指定端口,等待客户端连接。
- 客户端发送连接请求,服务器接受连接并建立连接。
- 客户端发送数据请求,服务器接收数据并进行处理。
- 服务器返回响应数据,客户端接收并处理响应。
- 关闭连接。
4. 多线程并发设计与实现方法为了提高TCP通信的并发处理能力,可以采用多线程的方式来实现。
具体方法如下:- 服务器端:通过线程池技术,创建一定数量的线程用于接收和处理客户端的连接请求。
每当有客户端连接请求到达时,从线程池中取出一个空闲线程来处理,并将连接交给该线程进行处理。
这样,服务器端可以同时处理多个客户端的请求,提高了并发处理能力。
- 客户端:在客户端的设计中,可以使用两个线程分别负责发送和接收数据。
发送线程负责将数据发送给服务器端,接收线程负责接收服务器返回的响应数据。
通过这种方式,客户端可以在发送数据的同时接收服务器的响应,提高了通信效率。
5. 多线程并发实现的优势与注意事项多线程并发设计在提高TCP通信效率方面具有以下优势: - 提高并发能力:通过多线程并发处理,服务器端能够同时处理多个客户端的请求,提高了系统的并发能力。
基于TCPIP的局域网聊天室的设计与实现详解

基于TCP/IP的局域网聊天室的设计与实现摘要随着计算机网络技术的发展,各种各样基于网络的应用也随之诞生,比如基于互联网的信息发布,通信,数据共享等等。
局域网的发展也同样迅速。
很多政府机构,企业,学校,都是先以一个统一的局域网联结在一起,再分别接入INTERNET.因此基于局域网的即时通信工具,就这样应运而生了。
所以本文提出了一个更加合理的设计,并在WINDOWS平台上加以了实现.在本实现内将客户端和服务端综合在一个程序之内,用多线程实现不同的并行任务。
并进行了人性化的界面设计,使用起来更加简单方便,并且功能十分合理,又易于扩展以及个性化定制。
本文通过局域网聊天系统来具体共享内存实现进程间的数据交换,利用windows消息机制实现进程间的同步,两种机制结合使用。
局域网聊天室作为一种新型的聊天工具可以提供更为及时、可靠、突破了必须有外界网络接入等优点,具有极其广泛的发展前景。
本文介绍了采用JAVA编程开发局域网聊天系统的一套比较常用的解决方案。
采用TCP模式进行文字聊天, 在客户端之间点对点(C/C)的进行。
本系统采用典型的C/S(客户端/服务器)的框架模式,在该方案中采用Socket (套接字)原理实现网络通信,最终实现了通过服务器中转的文字聊天、文件传输功能,从而大大降低了程序的开发难度。
本系统主要包括登陆、聊天、好友列表和服务器管理几个部分。
本系统从需求分析、系统的设计、功能的实现都严格遵循了软件工程设计的思想。
【关键词】Socket;TCP/IP;C/S;局域网聊天室AbstractWith the development of computer network technology, a variety of Web-based applications also will be the birth, such as Internet-based information release, communications, data sharing, and so on. LAN development is quickly. Many government agencies, businesses, schools, are first linked together in a unified LAN, respectively connected to the INTERNET, LAN-based instant messaging tool, and thus came into being. In this paper, a more rational design, in WINDOWS platform to achieve integrated in this realization of the client and server in different parallel tasks within a program, multi-threaded. And the design of user-friendly interface, easy to use and very reasonable, and easy expansion and customization. LAN chat system to a specific shared memory data exchange between process and use the windows message mechanism to achieve inter-process synchronization, the two mechanisms used in conjunctionLAN chat room as a new chat tool that can provide the advantages of more timely, reliable, broke the need of outside network access, has a very wide range of development prospects.This article describes a JA V A Programming LAN chat system, a more common solution. TCP mode, text chat, peer-to-peer (C / C) between the client. The system uses the framework of a typical C / S (Client / Server) mode, the program using the Socket (socket) the principle of network communication, and ultimately the transit through the server, text chat, file transfer capabilities, which greatly reduces the difficulty of program development.The system includes landing, chat, friend lists, and server management of several parts. The system needs analysis, system design, the realization of functions strictly follow the idea of software engineering.【Key words】Socket;TCP/IP;C/S;Local Area Network Chat Room目录第1章引言 (1)1.1课题背景 (1)1.2国内外研究现状 (2)1.3主要内容 (3)第2章局域网聊天室系统分析 (4)2.1系统需求分析 (4)2.1.1功能需求 (4)2.1.2系统基本流程图 (4)2.1.3性能要求 (5)2.1.4测试环境规定 (5)2.2可行性研究 (5)2.2.1成本可行性分析 (5)2.2.2技术可行性分析 (5)2.3系统开发环境的分析 (6)2.4数据流图 (6)2.4.1顶层数据流图 (6)2.4.2一层数据流图 (6)第3章系统设计 (7)3.1设计目标 (7)3.2构建开发环境 (7)3.3系统模块流程图 (7)3.4系统功能模块图 (9)第4章基于Eclipse的聊天室的分析与设计 (10)4.1 TCP套接字的运用 (10)4.2 TCP三次握手协议 (11)4.3程序结构 (11)4.3.1多用户在线方案 (11)4.3.2软件框架 (12)4.4代码实现 (12)4.4.1用户登陆模块 (12)4.4.2用户列表模块 (13)4.4.3文本聊天模块 (15)4.4.4文件传输模块 (17)第5章局域网聊天室系统测试 (20)5.1系统测试结果与分析 (20)5.1.1用户登陆以及用户列表 (20)5.1.2文本聊天 (21)5.1.3文件传输功能 (24)5.2本章小结 (25)结束语 (26)参考文献......................................................... .27致谢. (29)第1章引言1.1课题背景近年来,随着全球信息化进程的不断发展,网络的发展也非常迅速。
一种基于TCP的网络聊天软件实现

一种基于TCP的网络聊天软件实现1.简介网络聊天软件是在线沟通交流的重要工具。
基于TCP的网络聊天软件可以通过建立TCP连接,实现客户端和服务器之间的实时聊天功能。
本文将介绍一种基于TCP的网络聊天软件实现方法。
2.技术实现(1)客户端和服务器的连接建立客户端与服务器之间的连接可以通过socket编程实现。
客户端创建一个套接字,然后使用服务器的IP地址和端口号将套接字连接到服务器上的套接字。
服务器端负责接受来自客户端的连接请求,并创建一个新的线程以处理客户端的请求。
(2)用户注册和登录功能在网络聊天软件中,用户需要注册和登录才能使用聊天功能。
当用户第一次打开软件时,需要注册一个新的用户账号。
注册时,客户端将用户提供的用户名和密码发送给服务器进行验证,服务器将用户的信息存储到数据库中。
当用户后续登录时,客户端将用户名和密码发送给服务器进行验证,服务器返回登录成功或失败的结果。
(3)用户聊天功能用户登录后,可以与其他在线用户进行聊天。
客户端可以发送消息给服务器,服务器将接收到的消息广播给所有在线用户。
客户端也可以接收其他用户发送的消息,并在界面上显示出来。
为了实现实时聊天功能,客户端和服务器之间可以使用多线程来进行消息的收发。
(4)用户好友管理网络聊天软件通常提供好友管理功能,用户可以添加好友、删除好友,并查看自己的好友列表。
在基于TCP的聊天软件中,客户端可以发送请求给服务器添加或删除好友。
服务器接收到请求后,将对应的操作应用到数据库中保存的用户信息上。
(5)聊天记录存储网络聊天软件通常提供聊天记录存储功能,用户可以查看之前的聊天记录。
在基于TCP的聊天软件中,服务器可以将接受到的消息和发送的消息保存到数据库中。
用户可以在软件界面上选择查看聊天记录,并根据用户名、时间等条件进行。
3.客户端界面设计网络聊天软件的客户端通常包含登录界面、注册界面和聊天界面。
登录界面用于输入用户名和密码进行登录,注册界面用于注册新用户账号,聊天界面用于显示聊天内容和进行聊天操作。
C语言实现简易聊天室

通信流程了解完了⼀个 socket 的基本步骤后我们了解⼀下多线程以及线程的同步。
线程的同步每个线程都可以访问进程中的公共变量,资源,所以「使⽤多线程的过程中需要注意的问题是如何防⽌两个或两个以上的线程同时访问同⼀个数据,以免破坏数据的完整性」。
数据之间的相互制约包括1、「直接制约关系」,即⼀个线程的处理结果,为另⼀个线程的输⼊,因此线程之间直接制约着,这种关系可以称之为同步关系2、「间接制约关系」,即两个线程需要访问同⼀资源,该资源在同⼀时刻只能被⼀个线程访问,这种关系称之为线程间对资源的互斥访问,某种意义上说互斥是⼀种制约关系更⼩的同步windows线程间的同步⽅式有四种:「临界区、互斥量、信号量、事件。
」本项⽬是基于事件内核对象实现的线程同步,事件内核对象是⼀种抽象的对象,有受信和未授信两种状态,通过等待WaitForSingleObject实现线程同步。
事件内核对象的使⽤流程如下:「创建事件内核对象」HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpEventAttributes, //安全属性 BOOL bManualReset, //是否⼿动重置事件对象为未受信对象 BOOL bInitialState, //指定事件对象创建时的初始状态 LPCSTR lpName //事件对象的名称);「设置内核对象状态」BOOL SetEvent( HANDLE hEvent /*设置事件内核对象受信*/);BOOL ResetEvent( HANDLE hEvent /*设置事件内核对象未受信*/);「堵塞等待事件内核对象直到事件内核对象的状态为受信」DWORD WaitForSingleObject( HANDLE hHandle, DWORD dwMilliseconds);具体使⽤阅读全⽂在我的个⼈⽹站⾥看,篇幅太多。
服务端设计在创建套接字绑定监听之后会有⼀个等待连接的过程,在接收到新连接之后,需要创建⼀个线程来处理新连接,当有多个新连接时可通过创建多个线程来处理新连接,「定义最⼤连接数量以及最⼤套接字和最⼤线程」#define MAX_CLNT 256int clnt_cnt = 0; //统计套接字int clnt_socks[MAX_CLNT]; //管理套接字HANDLE hThread[MAX_CLNT]; //管理线程「当有新连接来临的时候创建线程处理新连接」,并将新连接添加到套接字数组⾥⾯管理hThread[clnt_cnt] = CreateThread(NULL, // 默认安全属性NULL, // 默认堆栈⼤⼩ThreadProc, // 线程⼊⼝地址(执⾏线程的函数)(void*)&clnt_sock, // 传给函数的参数0, // 指定线程⽴即运⾏&dwThreadId); // 返回线程的ID号clnt_socks[clnt_cnt++] = clnt_sock;线程的处理函数ThreadProc不做过多讲解,⼤致就是「⼀个服务器,多个客户端进⾏数据的接收以及群发」。
基于TCP的多线程聊天室实现

三:分工合作
李元池负责服务器端的编写,宋权负责客户端的编写,在写的过程中商量好用于收发消息的结构体保持一致。
四:运行步骤及注意事项:
在服务器开启监听服务之后,启用客户端段进行连接,
服务器程序编译:gcc 2_sever.c –o sever –lpthread
运行:./s
客户端程序编译:gcc 1_client.c –o client –lpthread
运行:./c+服务器的IP+端口号+你的昵称
目前代码存在的问题有:
用户昵称重复处理;异常退出处理;
五:运行截图
开启一个服务器和三个客户端昵称分别为:李元池,更渊博,许阳,
1:(群聊)李元池发送一个”Hello!everybody!”的消息:
2:私聊:李元池给客户端2 更渊博发送消息:
3:许阳给客户端1,李元池发送消息:(。・∀・)ノ゙嗨boby!
六:个人心得总结
这两个星期的课余时间主要和宋权一起写了Linux网络编程的大作业,当然学习的时候遇到了许多问题,比如:实践做聊天室的时候问题百出,刚开始的时候不知道怎么实现多个客户端通信,而通过测试发现每次客户端连接时的套接字不一样,都是从开始随着客户端连接的增多而递增的,所以我把每次连接时的套接字都存到了数组里,。
windows环境下C语言多线程实现网络编程多人聊天室

windows环境下C语言多线程实现网络编程多人聊天室在Windows环境下使用C语言实现多线程网络编程的多人聊天室是一个非常有趣和具有挑战性的项目。
在本文中,我将向您介绍如何使用C语言和Windows API来实现这样一个聊天室,并提供一些关键的代码示例。
首先,我们需要了解一些基本的网络编程概念。
在本例中,我们将使用TCP协议进行通信,因为它是一种可靠的协议,适用于需要确保数据传输完整性和顺序的场景。
要实现多人聊天室,我们需要一个服务器和多个客户端。
服务器将负责接收来自客户端的连接请求,并将消息广播给其他客户端。
客户端将负责连接到服务器,并发送和接收消息。
下面是一个简化的服务器代码示例:```c#include <stdio.h>#include <stdlib.h>#include <string.h>#include <winsock2.h>#define MAX_CLIENTS 10#define BUFFER_SIZE 1024DWORD WINAPI ClientHandler(LPVOID lpParam);int maiWSADATA wsaData;SOCKET serverSocket, clientSocket;struct sockaddr_in serverAddr, clientAddr;HANDLE threadHandles[MAX_CLIENTS];int clientCount = 0;// 初始化Winsockif (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)printf("Failed to initialize winsock.\n");return 1;}//创建服务器套接字serverSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (serverSocket == INVALID_SOCKET)printf("Failed to create server socket.\n");return 1;}//设置服务器地址和端口serverAddr.sin_family = AF_INET;serverAddr.sin_addr.s_addr = INADDR_ANY;serverAddr.sin_port = htons(8888);//绑定服务器套接字到指定地址和端口if (bind(serverSocket, (struct sockaddr*)&serverAddr, sizeof(serverAddr)) == SOCKET_ERROR)printf("Failed to bind server socket.\n");return 1;}//监听客户端连接请求if (listen(serverSocket, 5) == SOCKET_ERROR)printf("Failed to listen on server socket.\n");return 1;}printf("Server started. Waiting for connections...\n");while (1)//接受客户端连接请求int clientAddrSize = sizeof(clientAddr);clientSocket = accept(serverSocket, (structsockaddr*)&clientAddr, &clientAddrSize);if (clientSocket == INVALID_SOCKET)printf("Failed to accept client connection.\n");continue;}//创建线程处理客户端threadHandles[clientCount] = CreateThread(NULL, 0, ClientHandler, (LPVOID)clientSocket, 0, NULL);if (threadHandles[clientCount] == NULL)printf("Failed to create client handler thread.\n");closesocket(clientSocket);continue;}clientCount++;printf("Client connected. Total clients: %d\n", clientCount);}//关闭服务器套接字closesocket(serverSocket);// 清理WinsockWSACleanup(;return 0;DWORD WINAPI ClientHandler(LPVOID lpParam)SOCKET clientSocket = (SOCKET)lpParam;char buffer[BUFFER_SIZE];int bytesRead;while (1)//接收客户端消息bytesRead = recv(clientSocket, buffer, BUFFER_SIZE, 0);if (bytesRead <= 0)break;}//广播消息给其他客户端for (int i = 0; i < clientCount; i++)if (threadHandles[i] != NULL && threadHandles[i] != GetCurrentThread()send(threadHandles[i], buffer, bytesRead, 0);}}}//关闭客户端套接字closesocket(clientSocket);return 0;```上述代码包含一个主函数`main`和一个客户端处理函数`ClientHandler`。
【Chat】实验--实现CC++下TCP,服务器客户端多人聊天室

【Chat】实验--实现CC++下TCP,服务器客户端多⼈聊天室本次实验利⽤TCP/IP, 语⾔环境为 C/C++利⽤套接字Socket编程,以及线程处理,实现Server/CLient 之间多⼈的聊天系统的基本功能。
结果⼤致如:下⾯贴上代码(参考参考...)Server 部分:1/* TCPdtd.cpp - main, TCPdaytimed */23 #include <stdlib.h>4 #include <stdio.h>5 #include <winsock2.h>6 #include <time.h>7 #include "conio.h"8 #include <windows.h>9 #include <process.h>10 #include <math.h>1112#define QLEN 513#define WSVERS MAKEWORD(2, 0)14#define BUFLEN 2000 // 缓冲区⼤⼩15#pragma comment(lib,"ws2_32.lib") //winsock 2.2 library1617 SOCKET msock, ssock; /* master & slave sockets */18 SOCKET sockets[100] = {NULL};1920int cc;21char *pts; /* pointer to time string */22 time_t now; /* current time */23char buf[2000]; /* buffer */24char *input;25 HANDLE hThread1,hThread[100] = {NULL};26 unsigned int threadID,ThreadID[100],number;2728struct sockaddr_in fsin;29struct sockaddr_in Sin;3031 unsigned int __stdcall Chat(PVOID PM)32 {33char buf1[2000];34char buf2[2000];35char buf3[2000];36char buf4[2000];37 (void) time(&now);38 pts = ctime(&now);39 sockets[number] = ssock;40 SOCKET sock = ssock;41 ThreadID[number] = threadID;42 unsigned int threadid = threadID;43 sprintf(buf1," 时间: %s \t【我的线程号: %d 】\n",pts,threadid);44 (void) send(sock,buf1, sizeof(buf1), 0);45 sprintf(buf2," 线程号 <%d> 客户<IP:%s 端⼝:%d> enter \n",threadid,inet_ntoa(fsin.sin_addr),fsin.sin_port);46 printf("%s ",buf2);47 printf("\t将⾃动把此数据发送给所有客户! \n");48for(int i=0;i<=number;i++)49 {50if(sockets[i] != NULL && sockets[i] != sock)51 {52 (void) send(sockets[i],buf2, sizeof(buf2), 0);53 printf(" 发送⾄线程号<%d>成功!\n",ThreadID[i]);54 }55 }56 printf(" \n");575859 flag1:cc = recv(sock, buf3, BUFLEN, 0); //cc为接收的字符数60if(cc == SOCKET_ERROR|| cc == 0)61 {62 (void) time(&now);63 pts = ctime(&now);64 sprintf( buf3," 线程号 <%d> 客户<IP:%s 端⼝:%d> leave ! \n \t\t时间: %s",threadid,inet_ntoa(fsin.sin_addr),fsin.sin_port,pts);65 sock = NULL;66 sockets[number] = NULL;67 CloseHandle(hThread[number]);68 printf("%s ", buf3);69 printf("\t将⾃动把此数据发送给所有客户! \n");70for(int i=0;i<=number;i++)71 {72if(sockets[i] != NULL && sockets[i] != sock)73 {74 (void) send(sockets[i], buf3, sizeof(buf3), 0);75 printf(" 发送⾄线程号<%d>成功!\n",ThreadID[i]);76 }77 }78 printf(" \n");79 }8081else if(cc > 0)82 {83 (void) time(&now);84 pts = ctime(&now);85 sprintf(buf4," 线程号 <%d> 客户<IP:%s 端⼝:%d>说:%s \n \t\t时间: %s",threadid,inet_ntoa(fsin.sin_addr),fsin.sin_port,buf3,pts); 8687 printf("%s ",buf4);88 printf("\t将⾃动把此数据发送给所有客户! \n");89for(int i=0;i<=number;i++)90 {91if(sockets[i] != NULL && sockets[i] != sock)92 {93 (void) send(sockets[i],buf4, sizeof(buf4), 0);94 printf(" 发送⾄线程号<%d>成功!\n",ThreadID[i]);95 }96 }97 printf(" \n");9899goto flag1;100 }101 (void) closesocket(sock);102103return0;104 }105106107/*------------------------------------------------------------------------108 * main - Iterative TCP server for DAYTIME service109 *------------------------------------------------------------------------110*/111void main(int argc, char *argv[])112/* argc: 命令⾏参数个数,例如:C:\> TCPdaytimed 8080113 argc=2 argv[0]="TCPdaytimed",argv[1]="8080" */114 {115int alen; /* from-address length */116 WSADATA wsadata;117char *service = "5050";118 WSAStartup(WSVERS, &wsadata); //加载 winsock 2.2 library119 msock = socket(PF_INET, SOCK_STREAM, 0); //⽣成套接字。
Socket和多线程编程的聊天程序实现

四川大学课程设计基于TCP的计算机通信工具编程实现小组成员:姓名:孙道波学号:1043031420 姓名:蔡万增学号:1043031419 姓名:陈大多学号:1043031418 指导教师:杜勤健专业名称:通信工程2013年6月26日前言在本次课程设计中我们组组员共同努力,一、课题内容和要求 1.课题内容基于TCP 和多线程编程的聊天程序实现 2.课题要求网络聊天程序设计非常复杂,允许多个人同时聊天更加需要多线程技术的支持,请实现一个简单的多线程网络聊天程序模拟。
二、设计思路分析1. 在网络越来越发达的今天,人们对网络的依赖越来越强,网络聊天已经成了许多人生活中必不可少的一部分,基于这样的需求,出现了许多网络聊天通信工具,像QQ ,MSN 等等,但是人们已经不再满足于单一的两个人之间的聊天,而是对多人同时聊天产生了兴趣,于是出现了网络聊天室,不同地方的人可以在那个虚拟的聊天室里面热烈聊天。
基于这样的想法,我们用JAVA 设计一个多人同时聊天的小程序,用Socket 编程实现网络通讯,面向连接的,采用多线程的实现技术。
2. 在程序中,可以设置加入连接的最大数目,通过更改IP 地址和端口号,成为不同的客户端,与服务器端连接,进行多用户聊天。
3. 为方便用户交互,我们采用图形化的用户界面。
实现了好友添加,消息收发、显示等基本功能。
三、概要设计该网络聊天程序大致分为三个主要部分:客户端、服务器端和用户图形界面。
而运行在不同的机器上的进程是通过向套接字发送报文来通讯的。
各个部分的初步设计思想、流程及存储结构如下:1.程序整体框架:主程序监听一端口,等待客户接入;同时构造一个线程类,准备接管会话。
当一个Socket 会话产生后,将这个会话交给线程处理,然后主程序继续监听。
而进程通过TCP 套接字实现通信的示意图如下所示: .套接字 进程 主机或服务器具有缓存字变量的TCP主机或服务器 进程 套接字 具有缓存变量的TCPINTERNET客户机/服务器应用程序使用面向连接的设计思路:服务器 客户端 .2. 客户端(Client )客户端,使用Socket 对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket 。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
李元池负责服务器端的编写,宋权负责客户端的编写,在写的过程中商量好用于收发消息的结构体保持一致。
四:运行步骤及注意事项:
在服务器开启监听服务之后,启用客户端段进行连接,
服务器程序编译:gcc 2_sever.c –o sever –lpthread
运行:./s
客户端程序编译:gcc 1_client.c –o client –lpthread
运行:./c+服务器的IP+端口号+你的昵称
目前代码存在的问题有:
用户昵称重复处理;异常退出处理;
五:运行截图
开启一个服务器和三个客户端昵称分别为:李元池,更渊博,许阳,
1:(群聊)李元池发送一个”Hello!everybody!”的消息:
2:私聊:李元池给客户端2 更渊博发送消息:
3:许阳给客户端1,李元池发送消息:(。・∀・)ノ゙嗨boby!
六:个人心得总结
这两个星期的课余时间主要和宋权一起写了Linux网络编程的大作业,当然学习的时候遇到了许多问题,比如:实践做聊天室的时候问题百出,刚开始的时候不知道怎么实现多个客户端通信,而通过测试发现每次客户端连接时的套接字不一样,都是从开始随着客户端连接的增多而递增的,所以我把每次连接时的套接字都存到了数组里,。