单客户端,顾名思义,就是客户端只有一个用户去访问服务器,然后服务器根据该客户请求返回信息,先看下效果图:
服务端(左)和客户端(右):
注意,我是用了两个eclipse,一个只放服务端文件,一个只放客户端文件,先启动服务端,再启动客户端,客户端连接的ip地址即服务端ip,端口可以自己定义。
客户端LoginClient代码:
package com.android.socket.server; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.ObjectOutputStream; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.Socket; import java.net.UnknownHostException; import java.util.Scanner; /** *客户端 */ public class LoginClient { //向服务器发送请求 public static void main(String[] args) throws UnknownHostException, IOException { while(true){ Scanner scan=new Scanner(System.in); Socket soc=new Socket("192.168.1.108",6666);//IP为服务器的地址 BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(soc.getOutputStream()));//输出流,写入 BufferedReader br=new BufferedReader(new InputStreamReader(soc.getInputStream()));//输入流,读取 String str=scan.next(); bw.write(" "+str); bw.flush(); soc.shutdownOutput();//通知服务器已经写完,可以读取了 String line=br.readLine(); while(line!=null){ System.out.println(line); line=br.readLine(); } br.close(); bw.close(); soc.close(); } } }
服务端LoginServer代码:
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; /** * 服务器 */ public class LoginServer { public static void main(String[] args) throws IOException { while(true){ Scanner scan=new Scanner(System.in); // ServerSocket相当于一个Socket母体,当监听到客户端有Socket发来请求的时候,服务器的ServerSocket会创建一个与之通信的Socket ServerSocket ss=new ServerSocket(6666);// 识别客户端 Socket soc=ss.accept();// 为客户端创建Socket通信点 BufferedReader br=new BufferedReader(new InputStreamReader(soc.getInputStream()));// 客户端传过来的是字节流,通过转换流将其转换为字符流 String line=br.readLine();// 读取客户端传来的字符流 while(line!=null){ System.out.println(line); line=br.readLine(); } BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(soc.getOutputStream()));//输出流,向客户端回复 String str=scan.next(); bw.write(" "+str); bw.flush(); bw.close(); br.close(); soc.close(); ss.close(); } } }
首先,客户端用BufferedWriter以流的形式向服务端发送请求,并以soc.shutdownOutput();结束表示请求信息已经完毕,通知服务端可以读取,然后服务端在监听到来自某客户端的请求时,会通过BufferedReader来读取客户端发来的请求信息,步骤大致是这样的,代码中我已经注释的很清楚了,大家可以自己研究,这个是比较简单的也比较基础的Socket通讯实现。大家也可以在这里下载以上代码: