Java通信之服务器生猛上手
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
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通信之服务器生猛上手相关推荐
- flash java 通信_FLASH与服务器通讯 (JAVA)
1.FLASH 通过URL地址获得服务器数据. 这种方式最为简单,就像在浏览器的地址栏里面敲一样. 先建立一个URLRequest,然后用URLLoader载入就行了. 下面这个是载入一个图片,htm ...
- JAVA通信(二)——实现客户机和服务器通信
前面一篇博客我们简单地理清了JAVA创建服务器,以及客户机连接服务器的流程,今天我们继续往下学习,实现客户机和服务器的通信.由于基本概念我们已经在前一篇博客说清楚了,这里我们就不再进行赘述.(不清楚的 ...
- java在FTP服务器创建文件夹,java在ftp服务器上创建文件夹
java在ftp服务器上创建文件夹 内容精选 换一换 启动目的端时失败,错误码:SMS.3103,提示迁移失败原因"对目的服务器重新建立引导失败".启动目的端后,系统会重新安装目的 ...
- Java在游戏服务器开发中的应用
Java在游戏服务器开发中的应用 width="22" height="16" src="http://hits.sinajs.cn/A1/we ...
- java qq通信_结对博客(Java通信项目QQ)
项目名称:JAVA通信项目--QQ 成员:邢正,郑振兰 项目需求:QQ每个人都用过,它的意义就不再讲了.之所以选择做QQ事因为它有挑战性,涉及到通信.传输.swing等各种知识.(好吧我不装逼了,说的 ...
- Flex与Java通信之HttpService方式
2019独角兽企业重金招聘Python工程师标准>>> Flex用RemoteObject方式与Java通信是最常用的方式,这是一种最直观的方式.当然Flex也可以用HttpServ ...
- java解压服务器文件夹,java获取远程服务器上的文件夹
java获取远程服务器上的文件夹 内容精选 换一换 安装X722板载网卡驱动软件包,使裸金属服务器支持在v5服务器上下发.其他类型服务器可跳过此步骤.本文以Windows Server 2016为例, ...
- java web认证考试_用Java实现Web服务器HTTP协议
一.HTTP协议的作用原理 HTTP协议的作用原理包括四个步骤: 1.连接:Web浏览器与Web服务器建立连接.2.请求:Web浏览器通过socket向Web服务器提交请求.3.应答:Web浏览器提交 ...
- java拷贝远程服务器上文件,java拷贝远程服务器上文件
java拷贝远程服务器上文件 内容精选 换一换 在Windows模式下,调试功能暂不可用.为支持多交叉架构的调试场景,需要在安装MindStudio的服务器(UI Host)上安装gdb-multia ...
最新文章
- 【编程题目】输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印...
- java云应用,JAVA基础教程:云环境下单一应用服务搭建
- 专家解读:阅读AI论文对找工作有帮助吗?
- java.util -- List接口
- “约见”面试官系列之常见面试题之第七十一篇之let和var和const区别(建议收藏)
- python安装vtk_python - 安装VTK for Python - SO中文参考 - www.soinside.com
- 《Scikit-Learn与TensorFlow机器学习实用指南》第15章 自编码器
- python利器-python利器APP下载-python利器 v4.0.1_手机乐园
- Python: SystemError: Unknown opcode
- 2.vue的不更新特性-重用机制和key属性-data及其他字段-vue生命周期
- html中如何设置ttf,CSS怎么引用外部ttf字体?
- iphone链接电脑无法在我的计算机显示,iphone连接电脑不显示信任怎么回事
- 一个不简单的Procedure body例子
- 洛谷刷题笔记5.p1116 车厢重组
- makefile predefined variable $^ $@
- rem 用户改变字体大小_用户可以更改字体大小
- Gnuplot特殊字符之Symbol字体
- 变态级JAVA程序员面试32问(附答案)(转载)
- 这几个摸鱼神器,你怎么能不知道
- Python自动化运维
热门文章
- 易语言MySQL静态编译,我说易语言静态编译太强大……
- 升级 MacOS 到最新版本 macOS Ventura 13.0 后,Parallels Desktop 不可用
- PLSQL developer14/PLSQL14如何修改字体和文字大小,如何修改背景颜色?
- EXCEL简易的进度条
- 结对项目之需求分析与原型设计(导师选择)
- 关于背景图background-image
- Ubuntu16.04开启SSH服务
- ug中许可证服务器,ug教程:ug服务器许可证(LMTOOLS)设置教程
- JavaScript - 匿名函数具名化
- LINUX定时清理文件定时任务