Java通信之服务器生猛上手
一、生猛上手前的准备
Java其实是一门网络编程语言,这是和C语言和C++语言的一大区别,同时也是Java语言的一大特性;通过简单的Java语言代码就可以让多台计算机之间进连接,实现计算机之间的通信;下面介绍和通信的相关几个概念
服务器: 指一个 管理 资源并为用户提供服务的计算机 设备 。简单的理解为一台服务的计算机,这台计算机掌握着很多的资源和信息;
ip:

网络之间互连的协议(IP)是Internet Protocol的外语缩写,中文缩写为“网协”.
ip地址:每台连入互联网的计算机的编号,类似人的身份证号码,具有唯一性;只要知道ip地址,就知道是哪台机器;就好比知道你的身份证号,就可以找到那个唯一的你;
端口:"端口"是英文port的意译,可以认为是设备与外界通讯交流的出口。你的计算机上运行着无数个程序,服务器怎么知道该把消息发给这台计算机的哪个程序呢?端口号就起到标识计算机上每个运行程序的作用;
查询你计算机的IP地址和启动系统自带的客户端
win+r快捷键  在命令框中输入cmd  在黑色命令行中输入ipconfig
       
二、Java语言创建服务器的步骤

1、创建服务器对象,并指定端口号;

ServerSocket server= new ServerSocket(9090);

等待客户端的连接服务器

Socket socket = server.accept();

2、发送和接收消息

获取输入输出流:

InputStream ins = socket.getInputStream();

OutputStream ous = socket.getOutputStream();

3、我们可以对代码进行封装:初始化服务器的函数、读取消息的函数、发送消息的函数

4、多客户端连服务器

在accept的外围添加一个循环,用于循环接收客户端的连接

获取连接后的逻辑代码,我们得用线程完成


三、服务器生猛上手源代码:

package com.huaxin.server;import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;public class MyServer {public static void main(String[] args) {MyServer ms = new MyServer();ms.initServer();}public void initServer() {try {// 构造一个服务器对象ServerSocket server = new ServerSocket(9090);System.out.println("服务器已经创建成功,等待客户端的链接.....");while (true) {// 获取客户端的链接:套接字,阻塞代码final Socket socket = server.accept();System.out.println("有客户端连上服务器!");new Thread() {public void run() {try {// 客户端连上服务器之后:发送消息和接收消息// 获取输入流,用于读取消息InputStream ins = socket.getInputStream();// 获取输出流,用于发送消息OutputStream ous = socket.getOutputStream();/**发送消息 ***/sendMsg(ous);/**接收消息 **/String msg = readMsg(ins);while (!msg.equals("bye")) {System.out.println(msg);// 读取客户端发送过来的一条消息msg = readMsg(ins);}// 关闭流和套接字和服务器ous.close();ins.close();socket.close();} catch (Exception e) {e.printStackTrace();}};}.start();}} catch (Exception e) {e.printStackTrace();}}/*** 读取消息的函数*/public String readMsg(InputStream ins) throws Exception {// 读取第一个字节int value = ins.read();String str = "";// 循环读取字节内容// 当客户端输入回车的时候,读取消息部分会读取到13(回车)和10(换行)两个字节while (value != 10 && value != -1) {// 拼接成一个字符串str = str + (char) value;value = ins.read();}// 处理掉字符串后面的回车str = str.trim();return str;}/*** 发送消息的函数*/public void sendMsg(OutputStream ous) throws Exception {// 开始发送消息String msg = "welcome to our chating room !";byte[] bytes = msg.getBytes();ous.write(bytes);ous.flush();}}

四、运行结果:
测试: win+r快捷键  在命令框中输入cmd  在黑色命令行中输入telnet localhost 9090启动系统自带的客户端

telnet 指连接到 ip地址为localhost (本机)端口号为9090的计算机上;连接到同一WiFi下的计算机只要知道服务器的ip地址到可以连接到该程序

一定要先开启服务器:

利用localhost连接到服务器:


查看本机ip地址:

连接成功!并发送消息(暂时只能发送英文)

利用ip地址加端口号连接服务器:

因为是用循环,所以服务器一直在等待接受客户端的连入,每连入一个,用一个独立的线程去跑

控制台显示客户端输入的信息:

客户端输入bye,断开和服务器的链接(不要点X按钮,会出现bug,这个问题到后面解决)

五、总结

通过对服务器的生猛上手,明白了一些简单的通信的原理和概念,学到了很多小知识;比如查看自己计算机的ip地址,开启系统自带的客户端等;同时,对Java如何创建服务器的过程有了详细的了解;

出现的问题:有时会连接不到服务器

可能原因:

0、没有启动telnet服务

1、服务器没有先开启

2、telnet 或者localhost英文单词或者ip地址或者输入错误

3、在输入telnet后就按下了回车键,

4、端口号没有输入

今天就分享到这里!共勉!

Java通信之服务器生猛上手相关推荐

  1. flash java 通信_FLASH与服务器通讯 (JAVA)

    1.FLASH 通过URL地址获得服务器数据. 这种方式最为简单,就像在浏览器的地址栏里面敲一样. 先建立一个URLRequest,然后用URLLoader载入就行了. 下面这个是载入一个图片,htm ...

  2. JAVA通信(二)——实现客户机和服务器通信

    前面一篇博客我们简单地理清了JAVA创建服务器,以及客户机连接服务器的流程,今天我们继续往下学习,实现客户机和服务器的通信.由于基本概念我们已经在前一篇博客说清楚了,这里我们就不再进行赘述.(不清楚的 ...

  3. java在FTP服务器创建文件夹,java在ftp服务器上创建文件夹

    java在ftp服务器上创建文件夹 内容精选 换一换 启动目的端时失败,错误码:SMS.3103,提示迁移失败原因"对目的服务器重新建立引导失败".启动目的端后,系统会重新安装目的 ...

  4. Java在游戏服务器开发中的应用

     Java在游戏服务器开发中的应用 width="22" height="16" src="http://hits.sinajs.cn/A1/we ...

  5. java qq通信_结对博客(Java通信项目QQ)

    项目名称:JAVA通信项目--QQ 成员:邢正,郑振兰 项目需求:QQ每个人都用过,它的意义就不再讲了.之所以选择做QQ事因为它有挑战性,涉及到通信.传输.swing等各种知识.(好吧我不装逼了,说的 ...

  6. Flex与Java通信之HttpService方式

    2019独角兽企业重金招聘Python工程师标准>>> Flex用RemoteObject方式与Java通信是最常用的方式,这是一种最直观的方式.当然Flex也可以用HttpServ ...

  7. java解压服务器文件夹,java获取远程服务器上的文件夹

    java获取远程服务器上的文件夹 内容精选 换一换 安装X722板载网卡驱动软件包,使裸金属服务器支持在v5服务器上下发.其他类型服务器可跳过此步骤.本文以Windows Server 2016为例, ...

  8. java web认证考试_用Java实现Web服务器HTTP协议

    一.HTTP协议的作用原理 HTTP协议的作用原理包括四个步骤: 1.连接:Web浏览器与Web服务器建立连接.2.请求:Web浏览器通过socket向Web服务器提交请求.3.应答:Web浏览器提交 ...

  9. java拷贝远程服务器上文件,java拷贝远程服务器上文件

    java拷贝远程服务器上文件 内容精选 换一换 在Windows模式下,调试功能暂不可用.为支持多交叉架构的调试场景,需要在安装MindStudio的服务器(UI Host)上安装gdb-multia ...

最新文章

  1. 【编程题目】输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印...
  2. java云应用,JAVA基础教程:云环境下单一应用服务搭建
  3. 专家解读:阅读AI论文对找工作有帮助吗?
  4. java.util -- List接口
  5. “约见”面试官系列之常见面试题之第七十一篇之let和var和const区别(建议收藏)
  6. python安装vtk_python - 安装VTK for Python - SO中文参考 - www.soinside.com
  7. 《Scikit-Learn与TensorFlow机器学习实用指南》第15章 自编码器
  8. python利器-python利器APP下载-python利器 v4.0.1_手机乐园
  9. Python: SystemError: Unknown opcode
  10. 2.vue的不更新特性-重用机制和key属性-data及其他字段-vue生命周期
  11. html中如何设置ttf,CSS怎么引用外部ttf字体?
  12. iphone链接电脑无法在我的计算机显示,iphone连接电脑不显示信任怎么回事
  13. 一个不简单的Procedure body例子
  14. 洛谷刷题笔记5.p1116 车厢重组
  15. makefile predefined variable $^ $@
  16. rem 用户改变字体大小_用户可以更改字体大小
  17. Gnuplot特殊字符之Symbol字体
  18. 变态级JAVA程序员面试32问(附答案)(转载)
  19. 这几个摸鱼神器,你怎么能不知道
  20. Python自动化运维

热门文章

  1. 易语言MySQL静态编译,我说易语言静态编译太强大……
  2. 升级 MacOS 到最新版本 macOS Ventura 13.0 后,Parallels Desktop 不可用
  3. PLSQL developer14/PLSQL14如何修改字体和文字大小,如何修改背景颜色?
  4. EXCEL简易的进度条
  5. 结对项目之需求分析与原型设计(导师选择)
  6. 关于背景图background-image
  7. Ubuntu16.04开启SSH服务
  8. ug中许可证服务器,ug教程:ug服务器许可证(LMTOOLS)设置教程
  9. JavaScript - 匿名函数具名化
  10. LINUX定时清理文件定时任务