java socket 类分为:ServerSocket、Socket,即服务器端和客户端。这两个类都属于,java.net包中。
ServerSocket的用法:
1、首先创建ServerSocket对象,并绑定一个端口号(端口号取值范围0-65535,0-1023是系统保留端口,建议设置1023之后的,大点更好,注意不能使用已经占用的端口)。
2、通过ServerSocket的accept()方法侦听绑定的端口,此方法会返回一个Socket对象
3、接下来通过Socket对象获取OutputStream、InputStream输出输入流。
4、使用输入输出流读取或返回数据到客户端,分别使用流的read()、write()方法读取和输出,注意字符串必须转换为byte数组输出,读取类似。
5、详细使用请参考,java API
Socket使用示例:
实现了,服务器端和客户端的连接,可在两台电脑测试,一台也可以。注意是两个进程,首相启动服务器,再启动客户端。测试请在命令提示符中,分别打开两个命令提示符,一个运行服务器,另一个启动客户端。本例子实现的客户端输入一段字符串,服务器反转顺序后,返回到客户端。
代码如下:
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class Test10 {
public static void main(String[] args) {
if(args.length>0){ //通过判断main方法的参数分别启动不同的进程
Test10.server(); //有参数启动服务器
}else{
Test10.client(); //无参数启动客户端
}
}
public static void server() { //服务器端进程
try {
ServerSocket server = new ServerSocket(6669); //端口绑定为6669
Socket socket = server.accept(); //侦测端口
OutputStream os = socket.getOutputStream(); //通过socket的方法获取输入输出流
InputStream is = socket.getInputStream();
byte[] buf = new byte[100];
int len = is.read(buf); //读取客户端到byte数组
String str=new String(buf, 0, len);
char[] temp=str.toCharArray(); //字符串转化为char数组
str="";
for(int i=0;i<temp.length;i++){ //反转字符串
str+=temp[temp.length-1-i];
}
os.write(str.getBytes()); //输出到客户端
os.close();
is.close();
socket.close();
server.close();
} catch (Exception e) {
e.getMessage();
}
}
public static void client() { //客户端进程
try {
Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 6669);
OutputStream os = socket.getOutputStream();
InputStream is = socket.getInputStream();
Scanner sc=new Scanner(System.in); //生成scanner标准输入对象
byte[] buf=new byte[100];
System.out.print("请输入(回车确认):");
os.write(sc.nextLine().getBytes());
int len=is.read(buf);
System.out.print("服务器返回:");
System.out.println(new String(buf,0,len));
is.close();
os.close();
socket.close();
} catch (Exception e) {
e.getMessage();
}
}
}