Java客户端与服务器端的超简易通讯3
来源:互联网 发布:教程网站源码 编辑:程序博客网 时间:2024/05/16 11:18
上一片文章Java客户端与服务器端的超简易通讯2主要想实现的效果是:在客户端输入一些数据(例如:"Hello ServerSocket!"),并将这些数据发送给服务器端,在服务器端判断这些数据是否是服务器想要的,若为想要的,则返回数据给客户端(例如:"Hi Socket!"),并把客户端和服务器端所接收的数据都将其输出。,而这篇文章想实现的效果是:重点是多客户端与服务器交互。即:每个客户端和都可以发送一段字符串给服务器,而服务器也返回一个字段给客户端(本文是返回“XIXI”字符串)。
因为是多客户端与服务器的交互,假如还是像前两篇文章,服务器直接在一个主线程中处理客户端所发的信息,那是不明智的。因为当多个客户端同时发送请求的时候,服务器处理不过来,会卡住或直接崩溃。因此,我需要用到多线程的知识,每当一个客户端发送一个请求过来,就使用一个子线程去处理它。OK,思路说完,看代码来认识或熟悉一下。
客户端的代码和之前差不多,没有多少改变。但还是贴上看看。(随便一提,接下来的代码,注释将不会像之前那么详细,若不懂,建议看看之前两篇文章)
import java.io.DataInputStream;import java.io.InputStream;import java.io.OutputStream;import java.io.PrintStream;import java.net.Socket;import java.util.Scanner;/** * 客户端代码 * */public class ClientSocket {public static void main(String[] args) {try {// 创建一个socket,并开始连接服务器Socket s = new Socket("192.168.1.105", 80);// "192.168.1.105"为服务器的ip地址,80为服务器的端口后,这两个都不是固定的。//创建一个Scanner对象,用于输入Scanner sc = new Scanner(System.in);String socketData = sc.nextLine();// 创建一个输出流OutputStream os = s.getOutputStream();// 创建一个字节打印流,便于将数据储存到输出流中PrintStream ps = new PrintStream(os);// 将所输入的数据打印到输出流中ps.println(socketData);//创建一个输入流,用于读取用服务器中返回的数据InputStream is = s.getInputStream();//创建一个DataInputStream对象,便于读取输入流中的数据DataInputStream dis = new DataInputStream(is);//已UTF-8的格式读取输入流中的数据String request = dis.readLine();//输出所读取的数据System.out.println(request);// 关闭流对象,释放资源s.close();ps.close();os.close();is.close();dis.close();} catch (Exception e) {// 将错误报告输出e.printStackTrace();}}}
关于服务器的代码分两份,第一份是获取客户端的Socket对象,第二份是在一个线程(Thread)中处理数据,以下第一份:
import java.io.IOException;import java.net.ServerSocket;public class ServerSocket2 {public static void main(String[] args) {// TODO Auto-generated method stubboolean cycleBool = true;//用于控制循环int num = 0;//输出客户端发送信息的次数try {ServerSocket ss = new ServerSocket(80);while (cycleBool) {ServerSocketThread sst = new ServerSocketThread(ss.accept(),num);sst.start();//开启线程System.out.println("num------->" + num++);}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
以下为第二份为线程代码,若还不懂线程是什么的话,建议先去网上看看相关的知识点或教程再看这里的代码:
import java.io.DataInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.io.PrintStream;import java.net.Socket;public class ServerSocketThread extends Thread {private Socket s;private int num;public ServerSocketThread(Socket s, int num) {// TODO Auto-generated constructor stubthis.s = s;this.num = num;}@Overridepublic void run() {try {//输入流的获取和处理InputStream is = s.getInputStream();DataInputStream dis = new DataInputStream(is);String request = dis.readLine();System.out.println(request);//输出流OutputStream os = s.getOutputStream();PrintStream ps = new PrintStream(os);ps.println("XIXI");s.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
好了,代码就是以上这些,下面来看看运行的效果:
多客户端运行效果:
客户端1运行效果:
客户端2运行效果:
服务器运行效果:
本文代码:
Java客户端与服务器端的超简易通讯3
0 0
- Java客户端与服务器端的超简易通讯3
- Java客户端与服务器端的超简易通讯1
- Java客户端与服务器端的超简易通讯2
- Java客户端与服务器端的超简易通讯4
- Java Socket 模拟客户端与服务器端通讯
- JAVA模拟客户机与服务器实现简易的TCP通讯
- (源代码)基于wince OS客户端与基于window OS的服务器端之间的SOCKET通讯
- C++网络编程之——简易的服务器端与客户端
- Java中使用Socket实现服务器端和客户端通讯
- 客户端与服务器端的通信
- 服务器端与客户端的编程
- 客户端与服务器端的区别
- 客户端与服务器端的通信
- Thrift下Java客户端与服务器端的开发
- java中,客户端与服务器端跳转的几种方式
- Thrift下Java客户端与服务器端的开发
- Android客户端与java服务器端的Socket连接
- Java Socket服务器端与客户端的编程步骤总结
- 线段树查询操作思路代码
- APP扩展提高你的影响力 -iOS8/OS X v10.10应用扩展编程指南
- 性能测试指标
- HDU 2795 Billboard (线段树 单点更新 区间求最大值)
- 微聊应用
- Java客户端与服务器端的超简易通讯3
- Android ,下载安装apk 启动一个应用
- android 动画卡顿分析工具
- 生成随机密码
- Java多线程
- Java使用jxl导出Excel表格源码
- 8.6-填充颜色
- ios7毛玻璃效果实现
- Java中类和方法修饰符