socket简单示例
package net;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
//TCP编程例二 客户端给服务端发送信息,服务端将信息打印到控制台上 ,同时发送已收到信息给客户端
public class TestTCP2 {
//客户端
public static void client() throws Exception{
Socket socket = new Socket("127.0.0.1",8989);
InputStream in=null;
//向服务端发送消息
OutputStream os = socket.getOutputStream();
os.write("我是客户端".getBytes());
//为了避免线程阻塞,调用此方法关闭流,但不关闭连接
socket.shutdownOutput();
in =socket.getInputStream();
byte[] b = new byte[20];
int len;
while((len=in.read(b))!=-1){
String str = new String(b,0,len);
System.out.println(str);
}
}
//服务端
public static void server() throws Exception{
ServerSocket serverSocket = new ServerSocket(8989);
//服务端开启的时候会堵在这里,等待客户端的访问
Socket socket = serverSocket.accept();
InputStream inputStream = socket.getInputStream();
byte[] b = new byte[20];
int len;
while((len=inputStream.read(b))!=-1){
String str = new String(b,0,len);
System.out.println(str);
}
OutputStream os=socket.getOutputStream();
os.write("我已经收到了你的协议".getBytes());
}
public static void main(String[] args) throws Exception {
server();
// client();
}
}
如上代码,为什么执行的时候会报错
Exception in thread "main" java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:168)
at java.net.SocketInputStream.read(SocketInputStream.java:90)
at net.TestTCP2.client(TestTCP2.java:22)
at net.TestTCP2.main(TestTCP2.java:44)
报的是服务端已经被关闭了,但是我这里没有写关闭socket的代码。