版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36940806/article/details/85367817
一,介绍
socket编程也叫套接字编程是位于应用层,一台机器上的Socket与另一台机器上的Socket联接就会创建一条通信通道。Java语言通过流为代码提供数据,从而隐藏了所有这些细节,所以被称为流套接字。套接字有两种形式:a.TCP:可靠的,端到端的字节流通信协议。是一种面向连接的协议。b.UDP:UDP提供了一种发送封装的原始IP数据报的方法,并且发送时无需建立连接,是一种不可靠的连接。
二,TCP Socket 编程示例
客户端端代码
package tcpsocket;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class Client {
public static void main(String[] args) {
// 客户端参考代码
try {
// 1.创建一个socket对象(指定服务器IP,端口号)
Socket socket = new Socket("localhost", 8000);
// 2.获取输出流,用来写出数据,而写出的数据就通过网络发送给服务端了。
OutputStream os = socket.getOutputStream();
String info = "用户名:TOM,密码:1234";
os.write(info.getBytes());
os.flush();
// 3单向关闭输出流
// socket.shutdownOutput();
// 4.获取输入流,用来接收数据
InputStream is = socket.getInputStream();
byte[] b = new byte[1024];
int len = is.read(b);
System.out.println("客户端接收:" + new String(b, 0, len));
// 5.关闭流
os.close();
is.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
服务器端代码
package tcpsocket;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
try {
/*
* 运行在服务端的Socket
* 作用是:申请服务端口,客户端就是通过它申请的服务端口连接上服务端应用程序的
*
*/
ServerSocket serversocket = new ServerSocket(8000);
// 2.监听客户端请求
System.out.println("服务器正在等待连接....");
/*
* ServerSocket.accept()作用:
* 该方法是一个阻塞方法,用于监听其打开的8000端口,当一个客户端通过该端口与
* 服务端连接时,accept方法就会解除阻塞,然后创建一个Socket实例并返回。这个
* Socket的作用就是与刚刚连上的客户端进行通讯。
*/
Socket socket = serversocket.accept();
// 3.打开输入流,接收数据
InputStream is = socket.getInputStream();
byte[] b = new byte[1024];
int len = is.read(b);
System.out.println("服务器接收:" + new String(b, 0, len));
// 4.单向关闭输入流
// socket.shutdownInput();
// 5.打开输出流,发送数据
OutputStream os = socket.getOutputStream();
String info = "欢迎您,登录成功!";
os.write(info.getBytes());
os.flush();
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 6.关闭资源
is.close();
os.close();
socket.close();
serversocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
三,运行结果
先运行服务器端 Server
再运行客户端 Client
扫描二维码关注公众号,回复:
4901970 查看本文章