`
文昌平蓝杰
  • 浏览: 56061 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

零基础通信入门--实践篇

阅读更多
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 零基础学习篇-资料.zip

    这个“python 零基础学习篇-资料”压缩包可能包含上述各个主题的文档、教程、示例代码等,通过学习和实践,你将能够逐步成长为一名熟练的Python开发者。记得理论与实践相结合,多动手实践,遇到问题不要怕,多查阅...

    VB从入门到实践

    因此,本篇文章将基于标题、描述以及可能涉及的一些核心概念来构建与“VB从入门到实践”相关的知识点。 ### VB从入门到实践 #### 1. Visual Basic (VB) 简介 - **定义**:Visual Basic(简称VB)是一种由微软开发...

    dsp学习课件 入门篇 零基础学起

    在**《DSP原理及应用》**这门课程中,作为入门篇,它旨在为初学者提供一个从零开始学习DSP的基础平台。通常,这样的课程会涵盖以下几个核心知识点: 1. **信号与系统基础**:首先会介绍信号的基本概念,如模拟信号...

    (改)新人必看 基础篇-A类【业余无线电】-BG6VTV(1).zip

    在"基础篇-A类"的教程中,BG6VTV将引导我们从零开始,了解业余无线电的基本知识。这包括: 1. **无线电法规与执照**:在参与业余无线电活动前,你需要获得国家或地区的合法许可证。每个国家的法规和考试内容可能...

    从零开始编写网络游戏--基础篇 源码

    本篇将从零开始,逐步解析网络游戏的基础构建块,帮助你理解并掌握游戏开发的核心知识。 首先,"common"这个文件夹通常包含了游戏开发中的公共模块或基础类。在网络游戏开发中,这些公共模块可能是用来处理通用任务...

    WireshakeK 从入门到精通-基础篇

    通过《Wireshark从入门到精通【基础篇】》的学习,你将建立起网络分析的基本技能,为深入理解和优化网络打下坚实基础。不断实践,你将能运用Wireshark解决复杂网络问题,成为真正的网络分析大师。

    零基础学FPGA开发入门资料

    ### 零基础学FPGA开发入门资料 #### FPGA基础知识概览 FPGA(Field-Programmable Gate Array),即现场可编程门阵列,是一种半导体设备,它可以在制造完成后被用户重新编程来执行特定的任务。FPGA因其高度灵活性而...

    Android基础教程(非常详细)从零基础入门到精通,看完这一篇就够了.zip

    标题:Android开发入门教程:从零基础到精通的详尽指南 内容概要:本文为Android开发初学者提供了一篇全面而详细的教程,涵盖了Android开发的核心概念、搭建开发环境、基本用法以及进阶技巧。通过学习本文,读者可以...

    01-Linux操作系统零基础入门学习 v0.3版本.pdf

    本篇文章将深入探讨Linux零基础入门学习的关键知识点。 首先,理解Linux操作系统的基本概念至关重要。操作系统是连接硬件和用户的中间层,它管理硬件资源,如CPU、内存、硬盘等,并提供用户界面,使得用户可以通过...

    CCNA经典入门]零基础学CCNA

    ### CCNA基础知识详解:水晶头线序与设备互联法则 #### 水晶头线序 在有线网络中,水晶头是最常见的连接组件之一。...希望本篇文章能帮助初学者更好地入门CCNA,并为进一步深入学习打下坚实的基础。

    vue实战入门基础篇:从零开始仿门户网站实例

    本教程“Vue实战入门基础篇:从零开始仿门户网站实例”旨在帮助初学者快速掌握Vue的核心概念,并通过实际项目演练提升技能。 在学习Vue时,首要的是理解其核心组件系统。Vue采用组件化开发模式,允许开发者将复杂...

    零基础入门Matlab(一篇两个小时就能学完的入门)

    在零基础入门Matlab的过程中,首先需要了解的是软件界面和基本操作。Matlab的界面主要包括Command Window(命令行窗口)和Workspace(工作区)。通过命令行窗口输入指令,可以在工作区查看和管理变量。学习Matlab,...

    电子通信设计资料AT89S51实践与实验教程

    根据提供的文件信息,本篇文章将围绕“电子通信设计资料AT89S51实践与实验教程”这一主题展开,深入探讨AT89S51单片机的基本概念、特点及其在电子通信领域的应用实践等内容。 ### AT89S51单片机概述 AT89S51是一款...

    零死角玩转stm32-初级篇含PDF及例程.完美版

    "零死角玩转stm32-初级篇"是一个面向初学者的教程资源,包含PDF文档和示例程序,旨在帮助用户全面了解并掌握STM32的基础知识和实践技能。 首先,PDF教程很可能会涵盖以下内容: 1. **STM32架构**:介绍STM32系列的...

    零基础入门STM32,基于HAL库开发! 1.zip

    【标题】:“零基础入门STM32,基于HAL库开发!” 这篇教程旨在帮助初学者从零开始学习STM32微控制器的开发,特别强调了使用STM32 HAL(Hardware Abstraction Layer)库的方法。STM32是意法半导体公司...

    1.基础篇-CC2530实验代码教程.7z

    《CC2530实验代码教程》是针对Zigbee技术初学者的一份详细学习资料,旨在帮助读者从零开始掌握Zigbee通信的基础知识。Zigbee是一种基于IEEE 802.15.4标准的低功耗、短距离无线通信技术,广泛应用于物联网(IoT)设备...

    零死角玩转stm32-初级篇(终结篇

    通过“零死角玩转STM32-初级篇(终结篇)”,学习者将能掌握STM32的入门知识,为后续的中级和高级应用打下坚实基础。这份资料将理论讲解与实践案例相结合,旨在让读者能够独立完成STM32的开发工作。

Global site tag (gtag.js) - Google Analytics