public class SimpleSocket { public static void main(String[] args) { startServer(); } public static void startServer(int port){ try { //使用port端口创建服务器 ServerSocket ss = new ServerSocket(port); //获取链接服务器的客户端对象 Socket client = ss.accept(); //获取客户端输入输出流 InputStream is = client.getInputStream(); OutputStream os = client.getOutputStream(); String buf=""; while(true){ //读取一句话信息(一个字节一个字节的读取) int a = is.read(); while(a!=13){//遇到回车键,则判断为一句话 buf+=a; a = is.read(); } //此处得到的buf即为读取到的话 //向客户端发送信息("然后呢") os.write("然后呢".getBytes()); } } catch (IOException e) { e.printStackTrace(); } } }
一.服务器的简单实现
1.服务器 其实服务器的实现特别的简单,至少在java中是这样的。
ServerSocket server = new ServerSocket("4567");
这样就将一台电脑变成了一个服务器,并且将电脑上的4567端口做成了服务器的端口。说道这里呢就不得不说一说服务器端口了。
2.端口 无论是什么网络程序都得占用端口,包括QQ,浏览器(80),数据库(mysql:3306)等等,而一台电脑上一共有65535个端口,一个端口只能进行一个进程。也就是说,理论上一台电脑最多可以运行6万多个程序,呵呵,而实际上,那时候你的系统早就崩溃了,电脑是达不到那个水平的,至少我的电脑是这样的。注意,在我们编写程序的时候,最好不要使用1024以下的端口,因为很多系统程序是占用的这些端口,如果我们茫然使用,可能会带来跟多不必要的麻烦。例如,我们的浏览器占用的是80端口,你如果占用,有可能就不能浏览网页了。
3.网络通信,为什么叫网络通信,那就必须得通信,得有数据的流动和传输。这就必须使用到前面的流了。在通信里边也是一样,当我们建造了一个服务器,别人就能用telnet命令行登录咱们的服务器了,然而当别人访问我们的服务器时,是不会有反映的,因为我们没有对服务器做任何处理,所以就不能和客户端交流。
InputStream is = server.getInputStream(); OutputStream os = server.getOutputStream();
当我们写入这两句代码的时候,就已经获取了通信的输入输出流了。可以通过os给客户端发送信息,并可以通过is接收客户端发来的信息。
4.下面上服务器的简单代码,他实现了接收客户端的信息,并接收后给客户端发送“然后呢”(无论客户端发送什么都只给客户端回应这个话)。
上示:
二.客户端的简单实现 1.客户端与服务器一样。
Socket client = new Socket(IP, port);
就完成了连接服务器的工作,然后利用client获取客户端,得到输入输出流,然后传输数据。 2.下面上一段客户端的实现代码:
public class SimpleClient { public static void main(String[] args) { } public void startClient(String IP,int port){ try { //通过IP地址与端口链接服务器获取客户端信息 Socket client = new Socket(IP, port); //创建输入输出流 InputStream is = client.getInputStream(); OutputStream os = client.getOutputStream(); String buf =""; while(buf!="bye"){ //将缓存数组buf清空 buf=""; //从服务器读取数据 int a = is.read(); //不断读取,直到遇到回车键,则判断为一句话 while(a!=13){ buf+=a; a = is.read(); } } } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
可以看出,服务器与客户端基本上实现是一致的,并且我基本上都是在读取对方的信息,而并未放给对方实用的信息,我们可以在读取后加上一句“从当前键盘上读取数据,发送给对方”的操作就可以实现聊天功能。但这个功能有很多缺陷,首先这种两天只能是“你一句,我一句”我没说完你就不能说话,这显然是不符合实际要求的。然后这是服务器与客户端的聊天 ,我们前面说过,服务器只负责接受、处理并转发信息。所以我们应该是2个客户端之间的联系。最后,这个我们的服务器只能处理一个人的请求,并不能同时处理2个人的请求,比如:2个人同时连接我们的服务器,那就服务器就不能接受,所以我们得用线程去处理每一个客户端的请求,这样才能完成多人的聊天配置。
三.群聊
1.群聊的系统相对来说比较复杂,要比前面加起来的代码还要多很多。要考虑很多东西。但归根起来,也就是我上面提到的三条缺陷,当我们把这三条缺陷补充完整的时候,这个群聊模型就基本上出来了。在这里呢,我还是比较纠结的,因为如果把代码全部贴上去,那是很麻烦的,如果不呢,好像又说的不够完整。所以我将文件上传,可以自己研究研究。
四.题外话,基本上,聊天的处理已经完成,想必大家也对这个tcp的通讯过程有了一定的了解,在通讯之中,只要记住通讯的实质,也就是理论片中所提到的理论,通讯其实很简单,无处不在的感觉,此篇很粗糙,但是聊胜于无,实践实践,自己多捉摸才是硬道理。
相关推荐
这个“python 零基础学习篇-资料”压缩包可能包含上述各个主题的文档、教程、示例代码等,通过学习和实践,你将能够逐步成长为一名熟练的Python开发者。记得理论与实践相结合,多动手实践,遇到问题不要怕,多查阅...
因此,本篇文章将基于标题、描述以及可能涉及的一些核心概念来构建与“VB从入门到实践”相关的知识点。 ### VB从入门到实践 #### 1. Visual Basic (VB) 简介 - **定义**:Visual Basic(简称VB)是一种由微软开发...
在**《DSP原理及应用》**这门课程中,作为入门篇,它旨在为初学者提供一个从零开始学习DSP的基础平台。通常,这样的课程会涵盖以下几个核心知识点: 1. **信号与系统基础**:首先会介绍信号的基本概念,如模拟信号...
在"基础篇-A类"的教程中,BG6VTV将引导我们从零开始,了解业余无线电的基本知识。这包括: 1. **无线电法规与执照**:在参与业余无线电活动前,你需要获得国家或地区的合法许可证。每个国家的法规和考试内容可能...
本篇将从零开始,逐步解析网络游戏的基础构建块,帮助你理解并掌握游戏开发的核心知识。 首先,"common"这个文件夹通常包含了游戏开发中的公共模块或基础类。在网络游戏开发中,这些公共模块可能是用来处理通用任务...
通过《Wireshark从入门到精通【基础篇】》的学习,你将建立起网络分析的基本技能,为深入理解和优化网络打下坚实基础。不断实践,你将能运用Wireshark解决复杂网络问题,成为真正的网络分析大师。
### 零基础学FPGA开发入门资料 #### FPGA基础知识概览 FPGA(Field-Programmable Gate Array),即现场可编程门阵列,是一种半导体设备,它可以在制造完成后被用户重新编程来执行特定的任务。FPGA因其高度灵活性而...
标题:Android开发入门教程:从零基础到精通的详尽指南 内容概要:本文为Android开发初学者提供了一篇全面而详细的教程,涵盖了Android开发的核心概念、搭建开发环境、基本用法以及进阶技巧。通过学习本文,读者可以...
本篇文章将深入探讨Linux零基础入门学习的关键知识点。 首先,理解Linux操作系统的基本概念至关重要。操作系统是连接硬件和用户的中间层,它管理硬件资源,如CPU、内存、硬盘等,并提供用户界面,使得用户可以通过...
### CCNA基础知识详解:水晶头线序与设备互联法则 #### 水晶头线序 在有线网络中,水晶头是最常见的连接组件之一。...希望本篇文章能帮助初学者更好地入门CCNA,并为进一步深入学习打下坚实的基础。
本教程“Vue实战入门基础篇:从零开始仿门户网站实例”旨在帮助初学者快速掌握Vue的核心概念,并通过实际项目演练提升技能。 在学习Vue时,首要的是理解其核心组件系统。Vue采用组件化开发模式,允许开发者将复杂...
在零基础入门Matlab的过程中,首先需要了解的是软件界面和基本操作。Matlab的界面主要包括Command Window(命令行窗口)和Workspace(工作区)。通过命令行窗口输入指令,可以在工作区查看和管理变量。学习Matlab,...
根据提供的文件信息,本篇文章将围绕“电子通信设计资料AT89S51实践与实验教程”这一主题展开,深入探讨AT89S51单片机的基本概念、特点及其在电子通信领域的应用实践等内容。 ### AT89S51单片机概述 AT89S51是一款...
"零死角玩转stm32-初级篇"是一个面向初学者的教程资源,包含PDF文档和示例程序,旨在帮助用户全面了解并掌握STM32的基础知识和实践技能。 首先,PDF教程很可能会涵盖以下内容: 1. **STM32架构**:介绍STM32系列的...
【标题】:“零基础入门STM32,基于HAL库开发!” 这篇教程旨在帮助初学者从零开始学习STM32微控制器的开发,特别强调了使用STM32 HAL(Hardware Abstraction Layer)库的方法。STM32是意法半导体公司...
《CC2530实验代码教程》是针对Zigbee技术初学者的一份详细学习资料,旨在帮助读者从零开始掌握Zigbee通信的基础知识。Zigbee是一种基于IEEE 802.15.4标准的低功耗、短距离无线通信技术,广泛应用于物联网(IoT)设备...
通过“零死角玩转STM32-初级篇(终结篇)”,学习者将能掌握STM32的入门知识,为后续的中级和高级应用打下坚实基础。这份资料将理论讲解与实践案例相结合,旨在让读者能够独立完成STM32的开发工作。