第一次写这种文章,内心难免会有些小紧张,如若有哪里写的不好地方,请大佬们多多担待。
首先先介绍一下Socket的含义与应用,Socket中文名"套接字",英文名为“孔”或“插座”,它是网络上两个程序进行通信的管理者,应用者。简单的来说,网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket对象,而我们建立网络通信连接至少要一对端口号(socket)。在internet网上,我们一台主机可以同时运行多种不同的服务软件提供不同的服务,每一个服务都会创建一个socket,并绑定到一个端口上,每个端口提供不同的服务,正如其名一样像一个多孔插座,主机像是一个布满各种插座的房间,每一个插孔对应着一种不同的服务,客户软件将插头插进不同的插孔,得到的服务也不一样。
以J2SDK-1.3为例,Socket和ServerSocket类库位于java.net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。
步骤一: 建立连接
1.服务器开启端口号8888(端口号随便),时刻在监听着,并等待客户端的连接请求。
2.客户端知道服务器的ip与监听端口号,请求连接到服务器。
一旦建立了连接,服务端会得到一个新的Socket对象,该对象负责与客户端进行通信。
如果在开发调试的过程中,如果修改过了服务器Server代码,要关闭启动的Server,否则新的Server不能启动,因为8888端口被占用了 。
Server.java代码如下:
package socket;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
try {
//服务端打开端口8888
ServerSocket ss = new ServerSocket(8888);
//在8888端口上监听,看是否有连接请求过来
System.out.println("监听在端口号:8888");
Socket s = ss.accept();
System.out.println("有连接过来" + s);
s.close();
ss.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Client.java代码如下:
package socket;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
public class Client {
public static void main(String[] args) {
try {
//连接到本机的8888端口
Socket s = new Socket("127.0.0.1",8888);
System.out.println(s);
s.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
步骤二: 收发数字
一旦建立了连接,服务端与客户端就可以通过Socket进行通信了
1. 客户端打开输出流,并发送数字 520
2. 服务端打开输入流,接受数字 520,并打印
ServerDemo.java代码如下:
package socket;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerDemo{
public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(8888);
System.out.println("监听在端口号:8888");
Socket s = ss.accept();
//打开输入流
InputStream is = s.getInputStream();
//读取客户端发送的数据
int msg = is.read();
//打印出来
System.out.println(msg);
is.close();
s.close();
ss.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
ClientDemo.java代码如下:
package socket;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class ClientDemo {
public static void main(String[] args) {
try {
Socket s = new Socket("127.0.0.1", 8888);
// 打开输出流
OutputStream os = s.getOutputStream();
// 发送数字110到服务端
os.write(110);
os.close();
s.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
运行截图如下:
今天的就到这了,后面还会有的,有兴趣的朋友点击蓝色字体挚爱java或者http://how2j.cn/k/socket/socket-socket/400.html?p=41058网址,里面有更多学习内容等你来拿,谢谢朋友们。