Java网络编程-Socket通信

付费节点推荐


免费节点


节点使用教程


Socket通信

TCP协议是面向连接,可靠的,有序的,以字节流的方式发送数据。

当两个程序需要通信时,他们可以通过使用Socket类建立套接字对象并连接在一起(端口号和IP地址组合得出一个网络套接字)

java基于TCP协议实现网络通信的类

客户端Socket类的构造方法:

try {
Socket socket = new Socket("localhost", 800);

} catch (UnknownHostException e) {

e.printStackTrace();
} catch (IOException e) {

e.printStackTrace();
}

服务器端ServerSocket类的构造方法:
try {
ServerSocket server = new ServerSocket(800);
} catch (IOException e) {

e.printStackTrace();
}

Socket通信模型

socket

Socket通信实现步骤

1.创建ServerSocket和Scoket

2.打开连接到Socket的输入/输出流

3.按照协议对Socket进行读/写操作

4.关闭输入输出流,关闭Socket

java实现步骤:

服务器端:
1.创建ServerSocket对象,绑定相应端口
2.通过accept()方法监听客户端请求
3.连接建立后,通过输入流读取客户端发送的请求信息。
4.通过输出流向客户端发送响应信息。
5.关闭相关资源

 

客户端:
1.创建Socket对象,指明需要连接的服务器的地址和端口号
2.连接建立后,通过输出流向服务器端发送请求信息。
3.通过输入流获取服务器响应信息。
4.关闭相关资源

客户端与服务器通信实例

【Socket_Server.java】

package cn.bcoder.net_Demo;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class Socket_Server {

public static void main(String[] args) {
try {
// 创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口
ServerSocket server = new ServerSocket(12345);

System.out.println("*****服务器即将启动,等待客户端连接****");
// 调用accept()方法开始监听,等待客户端的连接
Socket socket = server.accept();
// 获取输入流,用来读取客户端信息
InputStream is = socket.getInputStream(); // 字节输入流
// 将字节输入流包装成字符输入流
InputStreamReader isr = new InputStreamReader(is);
// 将字符输入流增加缓冲
BufferedReader br = new BufferedReader(isr);
String info = null;
while ((info = br.readLine()) != null) {
System.out.println("我是服务器:客户端说:" + info);
}
socket.shutdownInput(); // 关闭输入流

// 获取输出流,用于响应客户端的请求
OutputStream os = socket.getOutputStream();
PrintWriter pw = new PrintWriter(os);
pw.write("http://bcoder.clbug.com");
pw.flush();// 刷新缓存

// 关闭资源
pw.close();
os.close();
br.close();
isr.close();
is.close();
socket.close();
server.close();

} catch (IOException e) {

e.printStackTrace();
}

}

}

【Socket_Client.java】

package cn.bcoder.net_Demo;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class Socket_Client {
public static void main(String[] args) {
try {
// 创建客户端Socket,指定服务器地址和端口
Socket client = new Socket("localhost", 12345);
// 获取输出流向服务器发送信息。
OutputStream os = client.getOutputStream(); // 字节输出流
PrintWriter pw = new PrintWriter(os); // 将输出流包装成打印流
pw.write("bcoder网站多少?");
pw.flush(); // 刷新缓存
client.shutdownOutput(); // 关闭输出流

// 获取输入流,
InputStream is = client.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String info = null;
while ((info = br.readLine()) != null) {
System.out.println("我是客户端:服务器回答说:" + info);
}

br.close();
is.close();
pw.close();
os.close();
client.close();
} catch (UnknownHostException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();
}

}

}

使用多线程实现多客户端的通信

使用了多线程将client和server读写分开,实现了client和server即时通信。因此解决了scanner输入流堵塞线程问题。另外accept方法增加了循环,可以实时监听多客户端的连接。

代码就不一一贴出来了。自己网盘拿吧。

http://pan.baidu.com/s/1bn2SzFp

未经允许不得转载:Bcoder资源网 » Java网络编程-Socket通信

相关推荐

赞 (0)
分享到:更多 ()

评论 0

评论前必须登录!

登陆 注册