69,371
社区成员
发帖
与我相关
我的任务
分享
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
int main(void) {
struct sockaddr_in server_addr;
int err = 0;
int ss = socket(AF_INET, SOCK_STREAM, 0);
bzero(&server_addr, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = inet_addr("0.0.0.0");
server_addr.sin_port = htons(8080);
err = bind(ss, (struct sockaddr *)&server_addr, sizeof(server_addr));
if(err < 0) {
printf("bind error\n");
return -1;
}
listen(ss, 10);
if(err < 0) {
printf("bind error\n");
return -1;
}
socklen_t addrlen;
while(1) {
int fd = accept(ss, (struct sockaddr*)&addrlen, &addrlen);
//char buffer[1024];
//read(s, buffer, 1024); 这个地方先注释掉就会发现第二次的write写不出去
int len = write(fd, "hello", 5);
int len2 = write(fd, "world", 5);
printf("fd:%d\n", fd);
printf("len:%d\n", len);
printf("len2:%d\n", len2);
printf("===========================\n");
close(fd);//把这句注释就能将第二次write的数据写出去
}
return 0;
}
package com.example.test;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class SocketTest {
public static void main(String[] args) {
for (int i = 0; i < 100; i++){
socketTest();
}
}
public static void socketTest() {
Socket socket = null;
try {
socket = new Socket("192.168.1.151", 8080);
InputStream is = socket.getInputStream();
byte[] buffer = new byte[128];
OutputStream os = socket.getOutputStream();
os.write("hello world".getBytes());
int len = is.read(buffer, 0, 5);
is.read(buffer, len, 5);
System.out.println("len:" + len);
System.out.println(new String(buffer));
} catch (IOException e) {
e.printStackTrace();
} finally {
if(socket != null) {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
客户端write完你服务端这边就close了, 导致客户端java read中断