在Java中使用Socket完成TCP程序的开发,使用此类可以建立点对点的通讯连接。
在Socket的程序开发中,服务器端使用ServerSocket等待客户端的连接,对于Java的网络程序来讲,每一个客户端都使用一个Socket对象表示。
客户端只要符合连接的通讯协议,服务器端都可以接收。
package IP_demo; import java.awt.print.Printable; import java.io.IOException; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket; public class HelloServer { public static void main(String[] args) throws IOException { ServerSocket server = null; Socket client = null; PrintStream out = null; server = new ServerSocket(8080); System.out.println("服务器运行,等待客户端连接···"); client = server.accept(); String str = "Helloworld"; out = new PrintStream(client.getOutputStream()); out.println(str); client.close(); server.close(); } }
package IP_demo; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.Socket; public class HelloClient { public static void main(String args[]) throws Exception {// 所有异常抛出 Socket client = null; client = new Socket("localhost", 8080); BufferedReader buf = null; buf = new BufferedReader(new InputStreamReader(client.getInputStream())); String str = buf.readLine(); System.out.println("服务器端输出内容:" + str); buf.close(); client.close(); } };
import java.net.* ; import java.io.* ; public class EchoThreadServer{ public static void main(String args[]) throws Exception { // 所有异常抛出 ServerSocket server = null ; // 定义ServerSocket类 Socket client = null ; // 表示客 户端 server = new ServerSocket(8888) ; // 服务器在8888端口上监听 boolean f = true ; // 定义个标记位 while(f){ System.out.println("服务器运行,等待客户端连接。") ; client = server.accept() ; // 得到连接,程序进入到阻塞状态 new Thread(new EchoThread(client)).start() ; // 每一个客户端表示一个线程 } server.close() ; } };
import java.net.* ; import java.io.* ; public class EchoThread implements Runnable{ private Socket client = null ; public EchoThread(Socket client){ this.client = client ; } public void run(){ BufferedReader buf = null ; // 接收输入流 PrintStream out = null ; // 打印流输出最方便 try{ out = new PrintStream(client.getOutputStream()) ; // 准备接收客户端的输入信息 buf = new BufferedReader(new InputStreamReader(client.getInputStream())) ; boolean flag = true ; // 标志位,表示可以一直接收并回应信息 while(flag){ String str = buf.readLine() ; // 接收客户端发送的内容 if(str==null||"".equals(str)){ // 表示没有内容 flag = false ; // 退出循环 }else{ if("bye".equals(str)){ // 如果输入的内容为bye表示结束 flag = false ; }else{ out.println("ECHO : " + str) ; // 回应信息 } } } client.close() ; }catch(Exception e){} } };
import java.net.* ; import java.io.* ; public class EchoClient{ public static void main(String args[]) throws Exception { // 所有异常抛出 Socket client = null ; // 表示客 户端 client = new Socket("localhost",8888) ; BufferedReader buf = null ; // 一次性接收完成 PrintStream out = null ; // 发送数据 BufferedReader input = null ; // 接收键盘数据 input = new BufferedReader(new InputStreamReader(System.in)) ; buf = new BufferedReader(new InputStreamReader(client.getInputStream())) ; out = new PrintStream(client.getOutputStream()) ; boolean flag = true ; // 定义标志位 while(flag){ System.out.print("输入信息:") ; String str = input.readLine() ; // 接收键盘的输入信息 out.println(str) ; if("bye".equals(str)){ flag = false ; }else{ String echo = buf.readLine() ; // 接收返回结果 System.out.println(echo) ; // 输出回应信息 } } buf.close() ; client.close() ; } };