JavaSE 套接字Socket编程
来源:互联网 发布:windows防火墙开关 编辑:程序博客网 时间:2024/06/05 19:46
- 计算机传输层的网络通信 的实质 是分布式的进程之间的通信。 通常分为TCP 和UDP ,前者面向连接,后者非连接、不可靠。
- Java中对两个协议都有支持,Java为TCP提供了服务端的ServerSocket类和客户端的Socket类 ,服务端通过 ServerSocket类提供的accept() 来返回一个Socket对象,形成了 端到端之间通信的桥梁,通过这个桥梁可以获取 InputStream和OutputStream对象操作流进行通信。 总之,Socket是原进程和目的进程之间的一条传输连接。
- Java为 UDP协议提供了DatagramSocket类和 DatagramPacket类来实现UDP的传输。
Java的套接字编程实例:
两个类,一个是服务端的类ServerTCP ,一个是客户端的类ClientTCP。
服务端ServerTCP主要实现 :
1)打开4000端口
2)循环等待并阻塞直到有客户端进程连接到4000端口
3) 分别用两个线程获取inputStream和outputStream,来从客户端读取信息、向客户端写入信息。
客户端ClientTCP主要实现:
1) 创建一个连接到localhost的4000端口的一个Socket
2) 启动两个线程分别获取inputStream和outputStream,来从服务端读取信息、向服务端写入信息。
具体代码:
ServerTCP类:
package com.ServerClient.Inhancement;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.io.InputStreamReader;import java.net.ServerSocket;import java.net.Socket;public class ServerTCP {public static void main(String[] args) throws Exception {ServerSocket ss = new ServerSocket(4000);//循环等待并阻塞直到有客户端进程连接到4000端口,当一个客户端进程连接到获取Socket后,循环等待下一个客户端进程while (true) {Socket socket = ss.accept();//分别用两个线程获取inputStream和outputStream,来从客户端读取信息、向客户端写入信息。Thread thOutput = new ThreadOutput(socket);Thread thInput = new ThreadInput(socket);thOutput.start();thInput.start();}}}class ThreadOutput extends Thread {private Socket socket;public ThreadOutput(Socket socket) {this.socket = socket;}@Overridepublic void run() {try {OutputStream os = socket.getOutputStream();while (true) {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));String str = br.readLine();os.write(str.getBytes());}} catch (IOException e) {e.printStackTrace();}}}class ThreadInput extends Thread {private Socket socket;public ThreadInput(Socket socket) {this.socket = socket;}@Overridepublic void run() {try {InputStream is = socket.getInputStream();while (true) {//byte[] buffer = new byte[2048];//int length = 0;//while (-1 != (length = is.read(buffer, 0, buffer.length))) {//String str = new String(buffer, 0, length);//System.out.println(str);//}byte[] buffer = new byte[2048];int length = is.read(buffer);System.out.println(new String(buffer, 0, length));}} catch (IOException e) {e.printStackTrace();}}}
客户端ClientTCP类:
package com.ServerClient.Inhancement;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.net.Socket;public class ClientTCP {public static void main(String[] args) throws Exception {// 创建一个连接到localhost的4000端口的一个SocketSocket socket = new Socket("127.0.0.1", 4000);// 启动两个线程分别获取inputStream和outputStream,来从服务端读取信息、向服务端写入信息。new ThreadOutput1(socket).start();new ThreadInput1(socket).start();}}// 该线程负责 从Socket中获得OutputStream流,来向输出流里写信息。class ThreadOutput1 extends Thread {private Socket socket;public ThreadOutput1(Socket socket) {this.socket = socket;}@Overridepublic void run() {try {OutputStream os = socket.getOutputStream();while (true) {//字符流里 套字节流,system.in是inputStream类型BufferedReader br = new BufferedReader(new InputStreamReader(System.in));String line = br.readLine();os.write(line.getBytes());}} catch (IOException e) {e.printStackTrace();}}}//// 该线程负责 从Socket中获得InputStream流,从输入流里读取信息。class ThreadInput1 extends Thread {private Socket socket;public ThreadInput1(Socket socket) {this.socket = socket;}@Overridepublic void run() {try {InputStream is = socket.getInputStream();while (true) {byte[] buffer = new byte[2048];int length = is.read(buffer);System.out.println(new String(buffer, 0, length));}} catch (IOException e) {e.printStackTrace();}}}
注意,先运行服务器程序,让其处于等待客户端状态。再运行客户端程序,连接服务端.
在windows cmd上运行两个类,效果如下:
实现了 两端 的通信。
0 0
- JavaSE 套接字Socket编程
- Socket套接字编程
- socket套接字编程
- socket 套接字编程
- socket套接字编程
- PHP套接字编程(socket)
- 套接字socket高级编程
- WinCE Socket套接字编程
- 套接字和socket编程
- 【socket】TCP套接字编程
- Java套接字Socket编程
- ios Socket套接字编程
- socket套接字编程函数
- Windows套接字编程/Socket
- 网络编程socket套接字
- iOS socket 套接字编程
- Socket编程--套接字概念
- 套接字(socket)与socket 编程
- iOS:属性、修饰词(内存管理) 及其对应成员变量 、ARC
- VC6.0下设置Unicode编译环境
- HTML <em> 标签
- linux杂谈(十七):iscsi存储分离技术
- 虚拟地址和物理地址的概念
- JavaSE 套接字Socket编程
- iOS bit to nsdata
- [leetcode]Sort List
- 物理地址和虚拟地址
- 广东:正式出台云计算发展规划,并提出三步走目标
- SG函数模板
- 简历编写四原则
- Win7 修改Winlogon.exe进程代码
- 关于 Java 中 finally 语句块的深度辨析