服务器和客户机通信-----字节传输

ip地址

windows+R然后输入cmd,输入ipconfig
以太网适配器ipv4网关

服务器

package ser;

public class ser1 {

	public void setServer(int port){
		try{
			System.out.println("1.即将在 "+port+" 端口创建服务器");
			java.net.ServerSocket ss=new java.net.ServerSocket(port);//在这个端口创建服务器
			System.out.println("2.在 "+port+" 端口创建服务器成功");
			java.net.Socket client=ss.accept();//阻塞,没有客户机进来的时候一直等待,获取客户机对象
			System.out.println("3.有一个客户机进来了");
			java.io.InputStream ins=client.getInputStream();//获取客户机的输入流
			java.io.OutputStream ous=client.getOutputStream();//获取客户机的输出流
			
			String mgs="who are you?";
			byte[] data=mgs.getBytes();//读取字节
			ous.write(data);//将输出流传给客户机
			
			int t=ins.read();//读取输入流
			System.out.println("服务器获得的客户机输入 "+t);
		}catch(Exception ef){
			ef.printStackTrace();
		}
		System.out.print("服务器退出了");
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		ser1 a=new ser1();
		a.setServer(9900);
	}

}

客户机

package cli;

public class cli1 {

	public void con2Sever(String ip,int port){
		try{
			System.out.println("1.即将创建到服务器的连接ip "+ip+" 端口号port "+port);
			java.net.Socket client=new java.net.Socket(ip,port);
			System.out.println("2.到服务器的连接ip "+ip+" port "+port+" 创建成功");
			java.io.InputStream ins=client.getInputStream();
			java.io.OutputStream ous=client.getOutputStream();
			byte[] datas=new byte[10];
			ins.read(datas);//读取到的数据存入datas
			String mgs=new String(datas);
			System.out.println("读取到的数据 "+mgs);
			ous.write('a');
		    System.out.println("4.发送了一个字节:");
		    ous.write('b');
		    ous.write('c'); 
		}catch(Exception ef){
			ef.printStackTrace();
		}
		System.out.println("客户机退出了");
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		cli1 a=new cli1();
		a.con2Sever("192.168.122.1",9900);
	}

}

在这里插入图片描述
在命令行输入,获得服务器的数据,who are you
在这里插入图片描述

改进

//循环等待客户机的连接
			while(true){
			java.net.Socket client=ss.accept();//阻塞,没有客户机进来的时候一直等待,获取客户机对象
			
			System.out.println("3.有一个客户机进来了");
			java.io.InputStream ins=client.getInputStream();//获取客户机的输入流
			java.io.OutputStream ous=client.getOutputStream();//获取客户机的输出流
			
			String mgs="who are you?\r\n";//输入光标回到开头,换行
			byte[] data=mgs.getBytes();//读取字节
			ous.write(data);//用输出流发送,发送传给客户机
			ous.flush();//强制输出
			int t=0;
			while(t!=13){//没有回车
				t=ins.read();//读取输入流
				System.out.println("服务器获得的客户机输入 "+t);
			}
			System.out.println("客户机按了回车 "+t);
			client.close();
			}

让服务器可以循环等待不至于客户机输入一个字母就退出,read只能读取一个字节,所以用一个循环就可以读取一个字符串,当然输出是ASCII码

发布了32 篇原创文章 · 获赞 25 · 访问量 4094

猜你喜欢

转载自blog.csdn.net/weixin_44143695/article/details/104071302