java实现简单的套接字通信
这里主要用到了io的一些类和方法和ServerSocket类的方法。
需要引用两个包
import java.net.*;
import java.io.*;
下面是Server的代码。
public class Servers {
public static void main(String[] args) throws IOException {//声明后,就不用去捕获了
// TODO 自动生成的方法存根
ServerSocket S=new ServerSocket(8888);//建立了一个服务器类,需要填写端口号,不然下面Socket c=S.accept();会有异常
for(;;) {//for循环可以实现一直通信
System.out.println("服务器运行");
Socket c=S.accept();//这个建立了一个通道,只有当有client时,才会建立,否则会阻塞在这里
InputStream in=c.getInputStream();//字节输入流
OutputStream out=c.getOutputStream();//字节输出流
//
byte []b=new byte[1024];
int sum=0;
String str1="";
while((sum=in.read(b))!=-1) {
String str=new String(b,0,sum);
str1+=str;
}//这一段就是将client传送的字节流转换为字符串
System.out.println("客户端说:"+str1);
out.write("我是服务器".getBytes());//将字符串转换成字节流发送给client
c.shutdownOutput();//关闭该通道
out.flush();//关闭连接,不然可能出现问题
}
}
}
下面是client的代码
public class Client {
public static void main(String[] args) throws UnknownHostException, IOException {
// TODO 自动生成的方法存根
for(;;) {
Socket C=new Socket("localhost",8888);//建立通道,
OutputStream out=C.getOutputStream();
InputStream in=C.getInputStream();
System.out.print("请输入你想对服务器说的话:");
Scanner sc=new Scanner(System.in);
String s=sc.next();
out.write(s.getBytes());
C.shutdownOutput();
out.flush();
byte []b=new byte[1024];
int sum=0;
String str1="";
while((sum=in.read(b))!=-1) {
String str=new String(b,0,sum);
str1+=str;
}
System.out.println("服务器说:"+str1);
}
}
}
差不多跟server类一样的,只是client是先写再读。
注意将这两段代码,放入两个不同的包,同一个包无法执行。