Java网络编程的socket使用(简单的服务器客户端实现)
发布日期:2021-06-29 11:14:24
浏览次数:2
分类:技术文章
本文共 5342 字,大约阅读时间需要 17 分钟。
import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;import java.util.Scanner;public class Server extends Thread { //创建一个ServerSocket,用于监听客户端Socket连接请求 ServerSocket server = null; Socket socket = null; public Server(int port) { try { server = new ServerSocket(port); } catch (IOException e) { e.printStackTrace(); } } public void run() { super.run(); try { System.out.println("wait client connect..."); //侦听并接受到此套接字的连接。此方法在连接传入之前一直阻塞 socket = server.accept(); new sendMessThread().start(); System.out.println(socket.getInetAddress().getHostAddress()+"SUCCESS TO CONNECT..."); InputStream in = socket.getInputStream(); int len = 0; byte[] buf = new byte[1024]; while ((len = in.read(buf)) != -1) { System.out.println("client saying: " + new String(buf, 0, len)); } } catch (IOException e) { e.printStackTrace(); } } class sendMessThread extends Thread { public void run() { super.run(); Scanner scanner = null; OutputStream out = null; try { if (socket != null) { scanner = new Scanner(System.in); out = socket.getOutputStream(); String in = ""; do { in = scanner.next(); out.write(("server saying: " + in).getBytes()); out.flush(); }while (!in.equals("q")); } } catch (IOException e) { e.printStackTrace(); } } } public static void main(String[] args) { Server server = new Server(1234); server.start(); }}
package Test;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;import java.net.UnknownHostException;import java.util.Scanner;public class Client extends Thread { //定义一个Socket对象 Socket socket = null; public Client(String host, int port) { try { //需要服务器的IP地址和端口号,才能获得正确的Socket对象 socket = new Socket(host, port); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public void run() { //客户端一连接就可以写数据个服务器了 new sendMessThread().start(); super.run(); try { // 读Sock里面的数据 InputStream s = socket.getInputStream(); byte[] buf = new byte[1024]; int len = 0; while ((len = s.read(buf)) != -1) { System.out.println(new String(buf, 0, len)); } } catch (IOException e) { e.printStackTrace(); } } //往Socket里面写数据,需要新开一个线程 class sendMessThread extends Thread{ public void run() { super.run(); //写操作 Scanner scanner = null; OutputStream os = null; try { scanner = new Scanner(System.in); os = socket.getOutputStream(); String in = ""; do { in = scanner.next(); os.write(("" + in).getBytes()); os.flush(); } while (!in.equals("bye")); } catch (IOException e) { e.printStackTrace(); } scanner.close(); try { os.close(); } catch (IOException e) { e.printStackTrace(); } } } public static void main(String[] args) { //需要服务器的正确的IP地址和端口号 Client clientTest = new Client("127.0.0.1", 1234); clientTest.start(); }}
简化版服务端import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;public class Server { public static void main(String[] args) throws IOException { ServerSocket server = new ServerSocket(9050); System.out.println("waiting..."); //等待client的请求 Socket socket = server.accept(); while (true) { // 接收客户端的数据 DataInputStream in = new DataInputStream(socket.getInputStream()); String string = in.readUTF(); System.out.println("client:" + string); // 发送给客户端数据 DataOutputStream out = new DataOutputStream(socket.getOutputStream()); out.writeUTF("hi,i am hserver!i say:" + string); } }}客户端import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.net.Socket;import java.net.UnknownHostException;import java.util.Scanner;public class Client { public static void main(String[] args) throws UnknownHostException, IOException { Socket socket = new Socket("localhost", 9050); while (true) { try { System.out.println("please input..."); Scanner scanner = new Scanner(System.in); String p = scanner.nextLine(); // 发送给服务器的数据 DataOutputStream out = new DataOutputStream(socket.getOutputStream()); out.writeUTF(p); // 接收服务器的返回数据 DataInputStream in = new DataInputStream(socket.getInputStream()); System.out.println("server:" + in.readUTF()); } catch (Exception e) { socket.close(); e.printStackTrace(); } } }}
转载地址:https://blog.csdn.net/ZWHSOUL/article/details/82911574 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2024年04月05日 15时02分41秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
30种EMC标准电路分享,再不收藏就晚了!
2019-04-29
这100道Linux常见面试题,看看你会多少?
2019-04-29
十年硬件老司机,结合实际案例,带你探索单片机低功耗设计!
2019-04-29
“2020年嵌入式软件秋招经验和对嵌入式软件未来的一点思考”
2019-04-29
嵌入式的坑在哪方面?
2019-04-29
三种常见嵌入式设备通信协议
2019-04-29
硬核,这个充电宝居然烧煤气!
2019-04-29
什么是模块化代码?如何写?
2019-04-29
STM32串口发送数据和接收数据方式总结
2019-04-29
来,看看这20个常用的宏定义!
2019-04-29
嵌入式开发中常用的几种通信接口总结
2019-04-29
为什么我那么努力,模电还是学不懂?
2019-04-29
PID系统稳定性与零极点的关系
2019-04-29
什么?电路板上还要喷漆?
2019-04-29
读博读废了是种什么样的体验?
2019-04-29
2020年,技术圈十大“翻车”事件!
2019-04-29
C语言状态机编程思想
2019-04-29
为什么很多电器设备都要使用单片机?
2019-04-29
在中国做操作系统研发 20 年是种什么体验?
2019-04-29
PCB走线角度为90度到底行不行?
2019-04-29