(⼆)Socket实战——安装开发⼯具IDEA
开始以为直接安装gradle就可以了,折腾半天安装好gradle后发现需要安装idea,后者包含前者,且拥有更多的功能
接下来记录下两个的区别:
gradle:Gradle是⼀个基于Apache Ant和Apache Maven概念的项⽬⾃动化构建开源⼯具。简单的说,Gradle是⼀个构建⼯具,它是⽤来帮助我们构建app的,构建包括编译、打包等过程。我们可以为Gradle指定构建规则,然后它就会根据我们的“命令”⾃动为我们构建app。
参考:⼗分钟理解Gradle - Bonker - 博客园
IDEA:idea(java语⾔开发的集成环境)⼀般指IntelliJ IDEA
参考:IntelliJ IDEA_百度百科
IDE:集成开发环境(IDE,Integrated Development Environment )是⽤于提供程序开发环境的应⽤程序,⼀般包括代码编辑器、编译器、调试器和图形⽤户界⾯等⼯具。IDE多被⽤于开发HTML应⽤软
JDK:(Java Development Kit) 是 Java 语⾔的软件开发⼯具包(SDK)。
安装教程Eclipse
Windows下安装和设置gradle
安装前提
检查JDK是否安装:
快捷键Win+R弹出的输⼊框中输⼊cmd,然后打开命令窗⼝,在命令窗⼝中输⼊java -version可以查看到java的版本信息
若没有安装JDK,配置好gradle,在命令窗⼝会看到如下提⽰,显⽰没有java的路径
若没有安装JDK
我的安装完毕后是这样的:说明安装成功
下载安装gradle
这⾥使⽤IDEA作为socket编程的开发⼯具
安装IDEA
指定⼯程创建位置:
完成创建,需等待⼀段时间,项⽬完成初始化,红框⾥都是需要等待⼀段时间才会出现的
接下来创建客户端和服务端的java类,在红框的java⽂件右击,选择new中的java class
创建客户端和服务器端两个⽂件
创建的结果如下图:
在两个java⽂件中编写:
客户端基本过程及例⼦:
(1) 创建 Socket 对象 (指定服务器的 IP 地址和端
⼝号) 并连接到服务器。
(2) 获得输出流进⾏数据发送。
(3) 获得输⼊流进⾏数据读取。
(4) 关闭socket资源,关闭连接。
import java.io.*;
import java.Inet4Address;
import java.InetSocketAddress;
import java.Socket
public class Client {
/
/java基础类⽅法的⼊⼝
public static void main(String[] args)throws IOException {
Socket socket=new Socket();
//读取流超时的时间设置为3000
socket.setSoTimeout(3000);
//连接本地,端⼝2000;超时时间3000ms
System.out.println("发起服务器连接咯,继续进⼊后续流程啦啦~");
System.out.println("客户端信息就是~:"+LocalAddress()+" P:"+LocalPort());//打印本地服务器地址和本地端⼝号        System.out.println("服务端信息就是~:"+InetAddress()+" P:"+Port());
try{
//发送接收数据
todo(socket);
}catch (Exception e){
System.out.println("竟然出现异常关闭啦");
}
//释放资源
socket.close();
System.out.println("拜拜,客户端已退出~");
}
//发送数据的⽅法
private  static void todo(Socket client) throws IOException{
/
/构建键盘输⼊流
InputStream in=System.in;
//把键盘输⼊流转换为BufferedReader
BufferedReader input=new BufferedReader(new InputStreamReader(in,"UTF-8"));
//得到Socket输出流(Client要发送出去给服务器的信息),并转换为打印流
OutputStream outputStream = OutputStream();
PrintStream socketPrintStream=new PrintStream(outputStream);
//得到Socket输⼊流(Server回复传⼊Client的信息),并转换为BufferedReader
InputStream inputStream = InputStream();
BufferedReader socketBufferedReader=new BufferedReader(new InputStreamReader(inputStream,"UTF-8"));
//判断Server是否想要退出,回复“bye”时是他想要结束对话
boolean flag=true;
do {
//键盘读取⼀⾏
String str = adLine();
//发送到服务器,(通俗就是显⽰在输⼊处,在键盘上输⼊什么,屏幕显⽰什么)
socketPrintStream.println(str);
//从服务器读取⼀⾏,即Server传⼊回复给Client的信息
String echo = adLine();
if("bye".equalsIgnoreCase(echo)){
flag=false;
} else{
/
/打印到屏幕上,Server回复什么就显⽰什么
System.out.println("Client回复:"+echo);
}
}while(flag);
//资源释放,关闭对于socket资源
socketPrintStream.close();
socketBufferedReader.close();
}
}
服务端创建过程及代码:
服务端通常会和多个客户端建⽴连接, 所以通常会
采⽤多线程和多个客户端进⾏通信。
(1) 服务器端创建 ServerSocket, 循环调⽤ accep 等待客户端连接。
(2) 客户端创建⼀个 Socket 并和服务器端连接。
(3) 服务器端接受到客户端连接请求后, 分配本地通信 Socket 并建⽴⼀个新线程, 后续通过该线程和客户端进⾏通信。(4) 在服务线程内部, 通过服务端本地 Socket 和客户端进⾏通信。
(5) 通信完成后, 服务端关闭连接, 释放线程。
(6) 服务端侦听 Socket 继续监听新的请求。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.ServerSocket;
import java.Socket;
public class Server {
public static void main(String[] args)throws IOException {
ServerSocket server=new ServerSocket(2000);
System.out.println("服务器准备就绪啦啦啦~");
System.out.println("服务器信息:"+InetAddress()+" P:"+LocalPort());
//等待多个客户端连接,循环异步线程
for(;;) {
//得到客户端
Socket client = server.accept();
//客户端构建异步线程
ClientHandler clientHandler = new ClientHandler(client);
//启动线程
clientHandler.start();
}
}
idea开发安卓app教程
/**
* 客户端消息处理
*/
//多个客户端需要做异步操作,建⽴异步处理类
private static class ClientHandler extends Thread{//线程
private  Socket socket;//代表当前的⼀个连接
private boolean flag=true;
ClientHandler(Socket socket){
this.socket=socket;
}//构造⽅法
//⼀旦Thead启动起来,就会运⾏run⽅法,代表线程启动的部分
@Override
public void run(){
super.run();
//打印客户端的信息
System.out.println("这个新客户端发起连接啦:"+InetAddress()+" P:"+Port());
//在发送过程中会触发⼀个IO过程,所以需要捕获异常
try {
//得到打印流,⽤于数据输出,服务器回送数据使⽤,即在屏幕上显⽰Server要回复Client的信息
PrintStream socketOutput=new OutputStream());
//得到输⼊流,⽤于接收数据,得到Client回复服务器的信息
BufferedReader sockeInput=new BufferedReader(new InputStream(),"UTF-8"));
do {
//客户端回复⼀条数据
String str = adLine();
if("bye".equalsIgnoreCase(str)){
flag=false;
//回送
socketOutput.println("bye");
}else{
//打印到屏幕,并回送数据长度
System.out.println(str);
socketOutput.println("Server回答说:" +str.length());
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。