java socket类实现网络通信

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();
		}
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章