socket简单示例

lv6917527 2016-03-22 05:12:23
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的代码。
...全文
155 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lv6917527 2016-03-23
  • 打赏
  • 举报
回复
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()); inputStream.close(); os.close(); /*这里为何要调用socket.close 我的理解是一次访问后关闭,输出 我已经收到了你的协议这句话是第二次重新连接, 不知道我这样理解对不对,如果不对,还请网友们指点 多谢。 */ socket.close(); }
lv6917527 2016-03-23
  • 打赏
  • 举报
回复
我不是已经在服务端写了吗,while,具体怎么写呢。
Spinach007 2016-03-23
  • 打赏
  • 举报
回复
没连上可能是端口补占用了吧。 最后close 相当服务端收完信息后,回了一句就断了呗
心-不在焉 2016-03-22
  • 打赏
  • 举报
回复
服务端需要写一个while(true) 去监听客户端的请求。

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧