java socket编程之实现客户端和服务器通讯一问一答

环境

1、一台电脑

2、开启两个myeclipse进行通信


 通讯思路

1、客户端使用socket,绑定服务器的IP地址和端口号就可以连接服务器

2、客户端可以通过socket的输入流输出流方法对服务器进行读取和写入

3、服务器使用ServerSocket,开始监听,server.accept();   这个方法是阻塞的,只有有客户端连接上,才会往下执行

4、server.accept()返回的新的一个嵌套字socket,通过这个socket对客户端进行读取和写入

java socket编程之实现客户端和服务器通讯一问一答_第1张图片


 myeclispe的端口号设置成8080 和8090,开启两个myeclispe,两个myeclispe进行通信

为什么修改tomcat的端口号,就可以了?

myeclipse做web项目的时候需要tomcat容器,tomcat依附在Myeclispe上,这个端口可以访问myeclispe的项目,也等同于myeclipse的"端口号"

java socket编程之实现客户端和服务器通讯一问一答_第2张图片

java socket编程之实现客户端和服务器通讯一问一答_第3张图片 


 服务端代码

 

package cn.com.server;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class SSocket {
	public static void main(String[] args) {
		ServerSocket server;
			try {
				server = new ServerSocket(8090);
				Socket socket=server.accept();	
				while(true){
					System.out.println("----------");
					  InputStream in;
						try {
							in = socket.getInputStream();
							  byte [] b=new byte[1024];
							   int len=0;
							   StringBuffer sb=new StringBuffer();
							   String s=null;
							   if((len=in.read(b))!=-1){
								    s=new String(b);
								   sb.append(s);
							   }
							   OutputStream out=socket.getOutputStream();
							   System.out.println("客户端信息:"+sb);
							   Scanner sc=new Scanner(System.in);
							   String str=sc.next();
							   System.out.println("我:"+str);
							   out.write(str.getBytes());
							   out.flush();
						} catch (IOException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
						 
						   
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
	}
}

客户端代码

package cn.com.server;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class ServerSocket {
//服务器端
	/*author:命运的信徒
	 * date:2019/4/10
	 * arm:做一个微型的qq
	 */
	//客户端发送信息
	
	public static void main(String[] args) {
		OutputStream out=null;
		Socket socket=null;
		try {
			//给192.168.0.106的服务器发送消息,通信的端口是8090
			//绑定到本地端口
			//SocketAddress so=new InetSocketAddress(8090);
			socket=new Socket("127.0.0.1",8090);
			//socket.bind(so);
			//开始连接这个嵌套字
			//socket.connect(so);
			//发送消息
			
			while(true){
				System.out.println("==========");
				out=socket.getOutputStream();
				//输入文字,希望从控制台输入的
				Scanner san=new Scanner(System.in);
				String str=san.next();
				System.out.println("我:"+str);
				out.write(str.getBytes());
				out.flush();
				//接收信息
				InputStream in=socket.getInputStream();
				//不仅仅是起到勺子舀输入流里面数据的作用,也是存储数据
				byte [] b=new byte[1024];
				StringBuffer sb=new StringBuffer();
				int len=0;
				 String s=null;
				if((len=in.read(b))!=-1){
					 s=new String(b);
					 System.out.println(s);
					sb.append(s);
				}
				System.out.println("来自服务器的数据:"+sb);
			}	
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			try {
				out.close();
				socket.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
	}
	
	
}

 效果如下

 java socket编程之实现客户端和服务器通讯一问一答_第4张图片

 

你可能感兴趣的:(socket通讯专栏)