环境
1、一台电脑
2、开启两个myeclipse进行通信
通讯思路
1、客户端使用socket,绑定服务器的IP地址和端口号就可以连接服务器
2、客户端可以通过socket的输入流输出流方法对服务器进行读取和写入
3、服务器使用ServerSocket,开始监听,server.accept(); 这个方法是阻塞的,只有有客户端连接上,才会往下执行
4、server.accept()返回的新的一个嵌套字socket,通过这个socket对客户端进行读取和写入
myeclispe的端口号设置成8080 和8090,开启两个myeclispe,两个myeclispe进行通信
为什么修改tomcat的端口号,就可以了?
myeclipse做web项目的时候需要tomcat容器,tomcat依附在Myeclispe上,这个端口可以访问myeclispe的项目,也等同于myeclipse的"端口号"
服务端代码
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();
}
}
}
}
效果如下