Socket:网络上两个程序通过一个双向的通信连接实现数据交换,连接的一段为一个socket,要实现两个程序的数据交换一般要一对socket。
这个定义参考自百度百科,我觉得说的还不错,另外,socket的英文有‘插口’的意思,其实也可以理解为程序的插口等等。
socket在实现程序通信方面具有重要意义,我看到它出现在c/c++、java、python、c#等诸多语言中,看来学什么语言都难逃此关。。
这里我用了一个最简单的socket客户端与服务的通信,对socket的基本过程做了初步的了解,在这里记录下代码,方便以后学习:
服务器端:
import java.io.*;
import java.net.*;
import java.util.*;
public class sever {
public void sever(){
try{
//建立服务器端的socket
ServerSocket sk=new ServerSocket(12345);
while(true){//服务器无穷循环等待客户端的请求
System.out.println("****服务器已经启动,等待客户端连接...****");
//accept()在等待客户端连接上来前保持闲置,当客户端连接上来,返回一个socket以便与客户端通信,ServerSocket与socket端口不同,以便ServerSocket空出来等待与其它用户通信
Socket socket=sk.accept();
//利用PrintWriter写入流
PrintWriter writer=new PrintWriter(socket.getOutputStream());
//在服务器端由用户键入字符串
System.out.println("input:");
Scanner in = new Scanner(System.in);
String s = in.nextLine();
//写入流
writer.println(s);
//关闭与socket的连接
writer.close();
}
}catch(Exception ex){
ex.printStackTrace();
}
}
public static void main(String[] args){
sever myserver=new sever();
myserver.sever();
}
}
客户端:
import java.io.*;
import java.net.*;
public class client {
public void go(){
try{
//建立客户端的socket,服务端的ip,客户端连接的端口号
Socket socket=new Socket("localhost",12345);
//建立连接到socket的底层输入串流
InputStreamReader streamreader=new InputStreamReader(socket.getInputStream());
//建立BufferedReader读取输入串流
BufferedReader reader=new BufferedReader(streamreader);
//度取结果给字符串
String advice=reader.readLine();
//客户端显示读取的结果
System.out.println(advice);
//关闭BufferedReader
reader.close();
}catch(Exception ex){
ex.printStackTrace();
}
}
public static void main(String[] args){
client myclient=new client();
myclient.go();
}
}
执行效果:在服务器端输入hello,客户端接收并显示: