安卓与linux服务器进行socket通信错误:BrokenPipeError 10C

我在linux上写了个python脚本,作为socket 服务器,安卓作为socket客户端,进行socket通信。linux的ip为192.168.80.100,socket端口为12345。
先启动socket服务器,再启动客户端,用客户端发送消息,服务器可以很好收到,但要对消息进行一段时间的处理,等到再发返回给客户端消息时,python就会出现:

 BrokenPipeError: [Errno 32] Broken pipe

这是安卓socket客户端代码:

import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.view.View.OnClickListener;
import android.os.Bundle;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import  java.net.Socket;

public class MainActivity extends AppCompatActivity {
    private TextView result = null;
    private static final String HOST = "192.168.80.100";
    private static final int PORT = 12345;
    private Socket socket = null;
    private BufferedReader bufferedReader = null;
    private PrintWriter printWriter = null;
    private String string = "";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final EditText eturl= findViewById(R.id.eturl);
        Button btn= findViewById(R.id.btn);

        initSocket();
        btn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                String message;
                message = eturl.getText().toString();
                if (socket.isConnected()){
                    if (!socket.isOutputShutdown()){
                        Toast.makeText(MainActivity.this,"正在发送,请稍等……",Toast.LENGTH_LONG).show();
                        sendMsg(message);
                    }
                }
            }
        });
    }

    protected void sendMsg(final String message){
        new Thread(new Runnable() {
            @Override
            public void run() {
                if(socket.isConnected()){
                    if(!socket.isOutputShutdown()){
                        printWriter.println(message);
                    }
                }
            }
        }).start();
    }

    protected void initSocket(){
        new Thread(new Runnable() {
            @Override
            public void run() {
                try{
                    socket=new Socket(HOST,PORT);
                    bufferedReader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
                    printWriter=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
                    if(socket!=null){
                        if (socket.isConnected()) {
                            if (!socket.isInputShutdown()) {
                                if ((string = bufferedReader.readLine()) != null) {
                                    Log.i("TAG","++"+string);
                                    string+="";
                                    handler.sendEmptyMessage(1);

                                } else {    //TODO
                                }
                            }
                        }
                    }
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
        }).start();
    }

    public Handler handler;

    {
        handler = new Handler() {
            public void handleMessage(Message msg) {
                if (msg.what == 1) {
                    Log.i("TAG", "--" + msg);
                    result.setText(new StringBuilder().append(result.getText().toString()).append(string).toString());
                }
            }
        };
    }

}

可能是安卓客户端在收到消息前已经关闭了socket,但要怎么解决呢,时间很急,求大神请教!不胜感激

6个回答

qq_40939785
Eumenides-Z 具体到我这个要怎么改呢?
一年多之前 回复

建议参考一下:
Python脚本获取Linux系统信息 http://www.linuxidc.com/Linux/2013-08/88531.htm

建议参考一下:
socket编程—— 服务器遇到Broken Pipe崩溃
https://www.cnblogs.com/jingzhishen/p/3453727.html

socket编程—— 服务器遇到Broken Pipe崩溃
https://www.cnblogs.com/jingzhishen/p/3453727.html

网络连接断开了,一个是安卓客户端可能发现一段时间没有数据发送,就把连接断开了。如果服务端需要随时发送数据给客户端,需要两者之间建立心跳连接

但是安卓电源管理机制等,可能在手机休眠等的状况还是会进行连接关闭和app结束

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
同一wifi下,安卓手机与linux虚拟机socket通信
我在linux虚拟机上建立了socket服务器,物理机为windows10,在安卓上建立socket客户端,是在Android Studio上写的,准备进行简单的socket通信。 当我在Android Studio上用安卓模拟器时,可以成功通信并处理。但我导出apk,安装在实体安卓手机上的时候,就连接不上,而且我windows物理机和安卓手机是在同一wifi环境下的。 windows和linux虚拟机可以ping互通,两边防火墙都关了。 实体通信需要什么具体的条件吗,为什么安卓模拟器可以成功,实体就连不上了? 急求解答!!!
手机安卓客户端和电脑服务器进行socket通信,为什么socket不通?
手机安卓客户端和电脑服务器进行socket通信,程序都是java写的,客户端socket函数填的是电脑的外网ip(百度搜出来那个),手机用的是3g信号,但是socket不通。。是ip填错了吗?
c++客户端与php服务器进行socket通信
如题,小弟目前在做一款游戏,客户端是cocos2d-x的c++代码,服务器用的php,现在进行socket通信,其他一切还好,就是在发送信息前面,加上4字节的包头时,怎么样发送,服务器都无法解析,有知道的大侠帮忙解一下惑吗?小弟在此万分感谢~~~ 代码如下: #pragma pack(1) struct SocketPackage { int Package_Length; int Package_Head; char Package_String[512]; }; #pragma pack() 如果不加两个int字段,一切ok,加上两个int字段后,转成string发送给服务器,服务器总是解析不出我的数据。请诸位知道的大侠不吝赐教~
Flashftp数据Socket错误:链接已超时
Flashftp链接服务器ftp时出现“数据Socket错误:链接已超时 列表错误”,网上找了下将ftp设置改为被动模式就可以解决这个问题,但是看我的客户端ftp软件配置数据连接模式就是“被动模式(PASV)”的。 ![](http://www.w3dev.cn/imgblog/20141124/1016590575.jpg) ![](http://www.w3dev.cn/imgblog/20141124/1017147761.jpg)
android socket通信,,手机在3g网下与pc通信,手机与手机之间通过socket通信
现在有个项目中是需要用gprs模块与手机之间进行通信,我在实验的时候是通过手机与pc机之间通信以及手机与手机之间通信来实验,在同个局域网下我用手机与pc之间进行socket通信是可以的,但是我用百度查寻pc的公网ip地址然后与手机通信就不行了。。现在请求大神的帮助呀。。
android与PC用socket通信
写了一个小的测试程序,android手机和PC进行通信。 服务器(PC)端代码: public class SimpleServer { public static void main(String[] args) throws IOException { // 创建一个ServerSocket,用于监听客户端Socket的连接请求 ServerSocket ss = new ServerSocket(30000); //① // 采用循环不断接受来自客户端的请求 while (true) { // 每当接受到客户端Socket的请求,服务器端也对应产生一个Socket Socket s = ss.accept(); OutputStream os = s.getOutputStream(); os.write("您好,您收到了服务器的新年祝福!\n" .getBytes("utf-8")); // 关闭输出流,关闭Socket os.close(); s.close(); } } } 客户端(android)代码: public class SimpleClient extends Activity { EditText show; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); show = (EditText) findViewById(R.id.show); new Thread() { @Override public void run() { try { // �������ӵ�Զ�̷�������Socket Socket socket = new Socket("192.168.0.100" , 30000); //�� // ��Socket��Ӧ����������װ��BufferedReader BufferedReader br = new BufferedReader( new InputStreamReader(socket.getInputStream())); // ������ͨIO���� String line = br.readLine(); show.setText("���Է���������ݣ�" + line); // �ر���������socket br.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } }.start(); } } 先启动PC机上的服务端,再启动安卓手机客户端,结果客户端无反应。 初步判断应该是客户端socket构造函数里的第一个参数IP地址错误,请问这个地址应该填公网地址还是本地局域网地址?(网络环境:路由器宽带接入,PC有线接路由器,Android无线连WIFI)
windows客户端和linux服务端socket通信失败,connect返回-1,求助
windows客户端和linux服务端socket通信失败,connect返回-1,查了下error是10060,但是双方能ping通,利用tcpdump抓包得到 10:57:36.096818 IP 192.168.1.104.3904 > 192.168.1.100.8887: Flags [S], seq 1236760459, win 8192, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0 10:57:39.097671 IP 192.168.1.104.3904 > 192.168.1.100.8887: Flags [S], seq 1236760459, win 8192, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0 10:57:45.098355 IP 192.168.1.104.3904 > 192.168.1.100.8887: Flags [S], seq 1236760459, win 65535, options [mss 1460,nop,nop,sackOK], length 0 求大神帮忙看下为啥connect失败
Socket通信编程,客户端为Android,服务器端为Python
android客户端向python端进行socket通信,客户端发送消息后,服务器端可以正常接收。但服务器发送消息后,一种情况:客户端收到后就立马闪退出了;第二种:或者客户端没收到,停在那里什么反应也没有。 python服务器端第一种情况: ![图片说明](https://img-ask.csdn.net/upload/201807/17/1531775740_388745.png) python服务器端第二种情况: ![图片说明](https://img-ask.csdn.net/upload/201807/17/1531775853_134427.png) 下面是android客户端代码: ![图片说明](https://img-ask.csdn.net/upload/201807/17/1531776022_448677.png) ![图片说明](https://img-ask.csdn.net/upload/201807/17/1531776103_115531.png) ![图片说明](https://img-ask.csdn.net/upload/201807/17/1531776144_408356.png) ![图片说明](https://img-ask.csdn.net/upload/201807/17/1531776238_96142.png) ![图片说明](https://img-ask.csdn.net/upload/201807/17/1531776276_11960.png) 要实现同一个android客户端可以向服务器多次进行发送消息,并可以接收服务器的消息,而且客户端不会闪退,要怎么修改代码呢? 急求解答,希望能详细一点!
linux虚拟机与windows间socket通信问题
虚拟机linux服务端 windows客户端 虚拟机桥接模式,能互相ping到,但运行连接不上 linux Server #include<stdio.h> #include<stdlib.h> #include<errno.h> #include<string.h> #include<sys/types.h> #include<sys/socket.h> #include<netinet/in.h> #include<sys/wait.h> #define BACKLOG 5 int main(int arge,char *argv[]) { int sockfd,new_fd; struct sockaddr_in my_addr; struct sockaddr_in their_addr; int sin_size; int data[2]; int sum ; if((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1) { perror("socket fail"); exit(1); } my_addr.sin_family = AF_INET; my_addr.sin_port = htons(12345); my_addr.sin_addr.s_addr = htonl(INADDR_ANY); bzero(&(my_addr.sin_zero),0); if(bind(sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr)) == -1) { perror("bind fail"); exit(1); } if(listen(sockfd,BACKLOG) ==-1) { perror("listen fail"); exit(1); } while(1) { sin_size = sizeof(struct sockaddr_in); printf("hello\n"); if((new_fd = accept(sockfd,(struct sockaddr *)&their_addr,&sin_size)) == -1) { perror("accept fail"); continue; } printf("Server:got connection from %s\n",inet_ntoa(their_addr.sin_addr)); if(!fork()) { while(1) { if((recv(new_fd,data,sizeof(data),0)) == -1) { printf("recv fail"); break; } sum = data[0] +data[1]; send(new_fd,(const char*)(char*)&sum,sizeof(sum),0); } close(new_fd); exit(0); } } close(new_fd); close(sockfd); return 0; } windows客户端 // Client.cpp : 定义控制台应用程序的入口点。 // //#include "stdafx.h" #include <iostream> #include <winsock.h> #pragma comment(lib, "ws2_32.lib") using namespace std; int main(int argc, char* argv[]) { try { //初始化套接字库 //WSAStartup WORD wVersion = MAKEWORD(2, 2); WSADATA wsaData; if (0 != ::WSAStartup(wVersion, &wsaData)) { throw "WSAStartup fail!"; } if (2 != HIBYTE(wsaData.wVersion) || 2 != LOBYTE(wsaData.wVersion)) { throw "Verify version fail!"; } //创建一个SOCKET //socket SOCKET sock = ::socket(AF_INET, SOCK_STREAM, 0); if (INVALID_SOCKET == sock) { throw "Create socket fail!"; } //初始化一个有效地址(给大堂经理一个胸签) //SOCKADDR_IN SOCKADDR_IN serverAddr; serverAddr.sin_family = AF_INET; serverAddr.sin_port = htons(12345); serverAddr.sin_addr.S_un.S_addr = inet_addr("192.168.1.15"); //连接服务器 if (SOCKET_ERROR == ::connect(sock, (const sockaddr*)&serverAddr, sizeof(serverAddr))) { int iError = ::WSAGetLastError(); cout << "connect fail!" << endl; //::Sleep(5000); } while (1) { int iSendData[2]; cout << "Please input data:" << endl; cin >> iSendData[0] >> iSendData[1]; ::send(sock, (const char*)&iSendData, sizeof(iSendData), 0); //::send(sock, "1111111", sizeof("1111111"), 0); //char szRecvBuf[100]; //::recv(sock, (char*)szRecvBuf, sizeof(szRecvBuf), 0); //接收应答 int iSum = 0; ::recv(sock, (char*)&iSum, sizeof(iSum), 0); cout << iSum <<endl; // cout << szRecvBuf << endl; } ::closesocket(sock); ::WSACleanup(); } catch (char* pStr) { cout << pStr << endl; return -1; } return 0; } ``` 一运行客户端就显示连接失败,求大神解决
Linux编程socket通信疑问
# Socket通信疑问 今天,在进行socket通信时,发现一个问题,尝试许久后,问能找到答案。 ## 程序功能:   使用socket通信编写服务器与客户端之间的循环应答,直到客户端发送"bye",服务器发送命令关闭客户端,并且服务器关闭。 具体问题描述: ### 服务器程序: ``` #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <string.h> #include <sys/un.h> int main(void){ int socketfd = socket(AF_LOCAL,SOCK_DGRAM,0); if ( socketfd == -1 ){ perror("socket"); exit(-1); } struct sockaddr_un add; add.sun_family = AF_UNIX ; strcpy(add.sun_path,"./sigcom"); //unlink("./sigcom"); int res = bind(socketfd,(struct sockaddr *)&add,sizeof(add)); if( res == -1){ perror("bind"); exit(-1); } // res = connect(socketfd,(struct sockaddr *)&add,sizeof(add)); // if( res == -1){ // perror("bind"); // exit(-1); // } char buf[20]; while(1){ read(socketfd,buf,sizeof(buf)); printf("%s\n",buf); if (!strcmp(buf,"bye")){ write(socketfd,"goodbye",sizeof("goodbye")); printf("GoodBye!\n"); break; }else{ int d = write(socketfd,"Recived!",sizeof("Recived!")); if (d == -1){ perror("write"); } printf("Send!\n"); } } close(socketfd); return 0; } ``` ### 客户端程序: ``` #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <string.h> #include <sys/un.h> int main(void){ int socketfd = socket(AF_LOCAL,SOCK_DGRAM,0); if ( socketfd == -1 ){ perror("socket"); exit(-1); } struct sockaddr_un add; add.sun_family = AF_UNIX ; strcpy(add.sun_path,"./sigcom"); int res = connect(socketfd,(struct sockaddr *)&add,sizeof(add)); if( res == -1){ perror("connect"); exit(-1); } char buf[20]; while(1){ scanf("%s",buf); write(socketfd,buf,sizeof(buf)); read(socketfd,buf,sizeof(buf)); printf("%s\n",buf); if (!strcmp(buf,"goodbye")){ printf("%s\n",buf); break; }else{ printf("%s\n",buf); } } printf("退出通信!\n"); close(socketfd); return 0; } ```   其中,在服务器这段程序中: ``` while(1){ read(socketfd,buf,sizeof(buf)); printf("%s\n",buf); if (!strcmp(buf,"bye")){ write(socketfd,"goodbye",sizeof("goodbye")); printf("GoodBye!\n"); break; }else{ int d = write(socketfd,"Recived!",sizeof("Recived!")); if (d == -1){ perror("write"); } printf("Send!\n"); } } ``` "write"函数出错:Transport endpoint is not connected。 在各种尝试后未能找到解决办法。
FTPClient设置被动模式了,本地电脑没有问题,但是在Linux服务器上运行报错。连接失败
## windows防火墙linuxftp操作文件FTPClient下载文件,本地Windows可以下载、删除,但是放到Linux服务器上就报错, ## 已经设置为被动模式了,还会是防火墙问题吗? ## ftp.retrieveFileStream(file)在这个地方报错,错误信息如下: [20170809 09:09:58.029] java.net.PlainSocketImpl.socketConnect(Native Method) [20170809 09:09:58.029] java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333) [20170809 09:09:58.029] java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195) [20170809 09:09:58.029] java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182) [20170809 09:09:58.029] java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366) [20170809 09:09:58.029] java.net.Socket.connect(Socket.java:529) [20170809 09:09:58.029] java.net.Socket.connect(Socket.java:478) [20170809 09:09:58.029] java.net.Socket.(Socket.java:375) [20170809 09:09:58.029] java.net.Socket.(Socket.java:189) [20170809 09:09:58.029] org.apache.commons.net.DefaultSocketFactory.createSocket(DefaultSocketFactory.java:53) [20170809 09:09:58.029] org.apache.commons.net.ftp.FTPClient._openDataConnection_(FTPClient.java:513) [20170809 09:09:58.029] org.apache.commons.net.ftp.FTPClient.retrieveFileStream(FTPClient.java:1342)
请问java socket 如何与 nodejs socket 通信
java socket 如何与 nodejs socket 通信,例如nodejs的socket.on()里面的第一个参数是如何识别的?我用的客户端是java写的,服务器端是nodejs写的,现在java通过socket与服务器端通信,如何用java模拟nodejs的socket.emin()方法?
python爬虫的奇葩错误,socket.gaierror: [Errno 11001] getaddrinfo failed
```''' 文件名:爬取斗鱼直播间信息到jsonline文件.py ''' from __future__ import unicode_literals import multiprocessing import socket import time import re import requests from bs4 import BeautifulSoup import json # 配置socket的ip和端口 client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) host = socket.gethostbyname("openbarrage.douyutv.com") port = 8601 client.connect((host, port)) # 获取用户昵称及弹幕信息的正则表达式 danmu = re.compile(b'type@=chatmsg.*?/nn@=(.*?)/txt@=(.*?)/.*?/level@=(.*?)/.*?/bnn@=(.*?)/bl@=(.*?)/') def sendmsg(msgstr): ''' 客户端向服务器发送请求的函数,集成发送协议头的功能 msgHead: 发送数据前的协议头,消息长度的两倍,及消息类型、加密字段和保密字段 使用while循环发送具体数据,保证将数据都发送出去 ''' msg = msgstr.encode('utf-8') data_length = len(msg) + 8 code = 689 msgHead = int.to_bytes(data_length, 4, 'little') \ + int.to_bytes(data_length, 4, 'little') + int.to_bytes(code, 4, 'little') client.send(msgHead) sent = 0 while sent < len(msg): tn = client.send(msg[sent:]) sent = sent + tn def start(roomid): ''' 发送登录验证请求后,获取服务器返回的弹幕信息,同时提取昵称及弹幕内容 登陆请求消息及入组消息末尾要加入\0 ''' msg = 'type@=loginreq/roomid@={}/\0'.format(roomid) sendmsg(msg) msg_more = 'type@=joingroup/rid@={}/gid@=-9999/\0'.format(roomid) sendmsg(msg_more) print('---------------欢迎连接到{}的直播间---------------'.format(get_name(roomid))) while True: data = client.recv(1024) danmu_more = danmu.findall(data) if not data: break else: with open(format(get_name(roomid)) + time.strftime('%Y.%m.%d', time.localtime(time.time())) + '直播弹幕', 'a') as f: try: for i in danmu_more: dmDict = {} # print(i) dmDict['昵称'] = i[0].decode(encoding='utf-8', errors='ignore') dmDict['弹幕内容'] = i[1].decode(encoding='utf-8', errors='ignore') dmDict['等级'] = i[2].decode(encoding='utf-8', errors='ignore') dmDict['徽章昵称'] = i[3].decode(encoding='utf-8', errors='ignore') dmDict['徽章等级'] = i[4].decode(encoding='utf-8', errors='ignore') dmJsonStr = json.dumps(dmDict, ensure_ascii=False) + '\n' # print(dmDict['昵称']) print(dmDict['弹幕内容']) f.write(dmJsonStr) danmuNum = danmuNum + 1 except: continue def keeplive(): ''' 发送心跳信息,维持TCP长连接 心跳消息末尾加入\0 ''' while True: msg = 'type@=mrkl/\0' sendmsg(msg) time.sleep(45) def get_name(roomid): ''' 利用BeautifulSoup获取直播间标题 ''' r = requests.get("http://www.douyu.com/" + roomid) soup = BeautifulSoup(r.text, 'lxml') return soup.find('a', {'class', 'Title-anchorName'}).string # 启动程序 if __name__ == '__main__': room_id = input('请输入房间ID: ') p1 = multiprocessing.Process(target=start, args=(room_id,)) p2 = multiprocessing.Process(target=keeplive) p1.start() p2.start() ```在别人电脑可以运行,但是在自己的电脑上就报错 附上报错截图,有大神可以帮忙处理一下吗?万分感谢 报错: E:\pythonzzz\venv\Scripts\python.exe E:/pythonzzz/爬虫/z3.py Traceback (most recent call last): File "E:/pythonzzz/爬虫/z3.py", line 17, in <module> host = socket.gethostbyname("openbarrage.douyutv.com") socket.gaierror: [Errno 11001] getaddrinfo failed Process finished with exit code 1
Linux编程socket通信问题。
# Socket通信疑问 请原谅我是个小白,可能问题比较幼稚。 今天,在进行socket通信时,发现一个问题,尝试许久后,问能找到答案。 ## 程序功能:   使用socket通信编写服务器与客户端之间的循环应答,直到客户端发送"bye",服务器发送命令关闭客户端,并且服务器关闭。 具体问题描述: ### 服务器程序: ``` #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <string.h> #include <sys/un.h> int main(void){ int socketfd = socket(AF_LOCAL,SOCK_DGRAM,0); if ( socketfd == -1 ){ perror("socket"); exit(-1); } struct sockaddr_un add; add.sun_family = AF_UNIX ; strcpy(add.sun_path,"./sigcom"); //unlink("./sigcom"); int res = bind(socketfd,(struct sockaddr *)&add,sizeof(add)); if( res == -1){ perror("bind"); exit(-1); } // res = connect(socketfd,(struct sockaddr *)&add,sizeof(add)); // if( res == -1){ // perror("bind"); // exit(-1); // } char buf[20]; while(1){ read(socketfd,buf,sizeof(buf)); printf("%s\n",buf); if (!strcmp(buf,"bye")){ write(socketfd,"goodbye",sizeof("goodbye")); printf("GoodBye!\n"); break; }else{ int d = write(socketfd,"Recived!",sizeof("Recived!")); if (d == -1){ perror("write"); } printf("Send!\n"); } } close(socketfd); return 0; } ``` ### 客户端程序: ``` #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <string.h> #include <sys/un.h> int main(void){ int socketfd = socket(AF_LOCAL,SOCK_DGRAM,0); if ( socketfd == -1 ){ perror("socket"); exit(-1); } struct sockaddr_un add; add.sun_family = AF_UNIX ; strcpy(add.sun_path,"./sigcom"); int res = connect(socketfd,(struct sockaddr *)&add,sizeof(add)); if( res == -1){ perror("connect"); exit(-1); } char buf[20]; while(1){ scanf("%s",buf); write(socketfd,buf,sizeof(buf)); read(socketfd,buf,sizeof(buf)); printf("%s\n",buf); if (!strcmp(buf,"goodbye")){ printf("%s\n",buf); break; }else{ printf("%s\n",buf); } } printf("退出通信!\n"); close(socketfd); return 0; } ```   其中,在服务器这段程序中: ``` while(1){ read(socketfd,buf,sizeof(buf)); printf("%s\n",buf); if (!strcmp(buf,"bye")){ write(socketfd,"goodbye",sizeof("goodbye")); printf("GoodBye!\n"); break; }else{ int d = write(socketfd,"Recived!",sizeof("Recived!")); if (d == -1){ perror("write"); } printf("Send!\n"); } } ``` "write"函数出错:Transport endpoint is not connected。 在各种尝试后未能找到解决办法。
Android用同一个socket通信的问题
# Android用同一个socket通信,socket不关闭,但手机上一个界面会把下一个界面的socket流接收掉,怎么解决?
android 客户端socket连接服务器,socket何时close
假设socket连接好了,现在客户端向服务器发送完了数据,这个时候需要关闭socket吗? 如果关闭后,某个时候又需要发送其他数据,再建立连接? 还是说建立通信协议,一次socket连接后一直保持通信状态,根据通信协议对不同的数据进行不同的处理,然后等客户端程序退出时再关闭socket。
安卓Wifi连接实现socket通信
两部安卓手机通过Wifi连接,通过socket通信,Wifi由路由器发出,但socket的IP地址写的是路由器的地址根本无法实现通信,是哪里有错吗??
linux socket 通信问题 ?
我在2两台虚拟机上分别运行linux 服务端和客服端socket程序,客户端和服务端能正常通信,但是我用wireshark 抓包时确没抓到有这两个虚拟机的通信包,请问高手们这个是啥情况??
socket通信,我的计算机连不上服务器
我在阿里云上面租了一个服务器,然后在我的电脑上能用socket协议与服务器通信吗
动态规划入门到熟悉,看不懂来打我啊
持续更新。。。。。。 2.1斐波那契系列问题 2.2矩阵系列问题 2.3跳跃系列问题 3.1 01背包 3.2 完全背包 3.3多重背包 3.4 一些变形选讲 2.1斐波那契系列问题 在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n&gt;=2,n∈N*)根据定义,前十项为1, 1, 2, 3...
程序员,职场上请远离这种人!
对有些职场人来讲,甩锅就是一种生存手段。01.从大学打篮球说起上大学的时候喜欢打篮球,然后我又特别喜欢抢篮板,经常是跳起来的时候没事,落下来的时候偶尔会踩到别人的脚上,于...
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私...
对计算机专业来说学历真的重要吗?
我本科学校是渣渣二本,研究生学校是985,现在毕业五年,校招笔试、面试,社招面试参加了两年了,就我个人的经历来说下这个问题。 这篇文章很长,但绝对是精华,相信我,读完以后,你会知道学历不好的解决方案,记得帮我点赞哦。 先说结论,无论赞不赞同,它本质就是这样:对于技术类工作而言,学历五年以内非常重要,但有办法弥补。五年以后,不重要。 目录: 张雪峰讲述的事实 我看到的事实 为什么会这样 ...
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
Python——画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)
最近翻到一篇知乎,上面有不少用Python(大多是turtle库)绘制的树图,感觉很漂亮,我整理了一下,挑了一些我觉得不错的代码分享给大家(这些我都测试过,确实可以生成) one 樱花树 动态生成樱花 效果图(这个是动态的): 实现代码 import turtle as T import random import time # 画樱花的躯干(60,t) def Tree(branch, ...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
一个读研让我损失了一百万的真实故事
关注我!只要10分钟,包你学会数据分析 毕业后,应该就业还是考研? 我刚出国留学那会儿,就惊讶的发现,外国local95%都不会选择读研 他们说,硕士学费很贵,时间宝贵,老板不认,所以很费 当几乎所有人都是本科学历时,硕士学历反而像个异类 在老板眼里,三年硕士远远不如3年的工作经验实用 他们甚至专门为拒绝高学历者发明了一个词,叫overoccupie...
Python 植物大战僵尸代码实现(2):植物卡片选择和种植
这篇文章要介绍的是: - 上方植物卡片栏的实现。 - 点击植物卡片,鼠标切换为植物图片。 - 鼠标移动时,判断当前在哪个方格中,并显示半透明的植物作为提示。
西游记团队中如果需要裁掉一个人,会先裁掉谁?
2019年互联网寒冬,大批企业开始裁员,下图是网上流传的一张截图: 裁员不可避免,那如何才能做到不管大环境如何变化,自身不受影响呢? 我们先来看一个有意思的故事,如果西游记取经团队需要裁员一名,会裁掉谁呢,为什么? 西游记团队组成: 1.唐僧 作为团队teamleader,有很坚韧的品性和极高的原则性,不达目的不罢休,遇到任何问题,都没有退缩过,又很得上司支持和赏识(直接得到唐太宗的任命,既给
shell脚本:备份数据库、代码上线
备份MySQL数据库 场景: 一台MySQL服务器,跑着5个数据库,在没有做主从的情况下,需要对这5个库进行备份 需求: 1)每天备份一次,需要备份所有的库 2)把备份数据存放到/data/backup/下 3)备份文件名称格式示例:dbname-2019-11-23.sql 4)需要对1天以前的所有sql文件压缩,格式为gzip 5)本地数据保留1周 6)需要把备份的数据同步到远程备份中心,假如...
聊聊C语言和指针的本质
坐着绿皮车上海到杭州,24块钱,很宽敞,在火车上非正式地聊几句。 很多编程语言都以 “没有指针” 作为自己的优势来宣传,然而,对于C语言,指针却是与生俱来的。 那么,什么是指针,为什么大家都想避开指针。 很简单, 指针就是地址,当一个地址作为一个变量存在时,它就被叫做指针,该变量的类型,自然就是指针类型。 指针的作用就是,给出一个指针,取出该指针指向地址处的值。为了理解本质,我们从计算机模型说起...
为什么你学不过动态规划?告别动态规划,谈谈我的经验
动态规划难吗?说实话,我觉得很难,特别是对于初学者来说,我当时入门动态规划的时候,是看 0-1 背包问题,当时真的是一脸懵逼。后来,我遇到动态规划的题,看的懂答案,但就是自己不会做,不知道怎么下手。就像做递归的题,看的懂答案,但下不了手,关于递归的,我之前也写过一篇套路的文章,如果对递归不大懂的,强烈建议看一看:为什么你学不会递归,告别递归,谈谈我的经验 对于动态规划,春招秋招时好多题都会用到动态...
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外...
字节跳动面试官这样问消息队列:分布式事务、重复消费、顺序消费,我整理了一下
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式和人才交流群,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸...
如何安装 IntelliJ IDEA 最新版本——详细教程
IntelliJ IDEA 简称 IDEA,被业界公认为最好的 Java 集成开发工具,尤其在智能代码助手、代码自动提示、代码重构、代码版本管理(Git、SVN、Maven)、单元测试、代码分析等方面有着亮眼的发挥。IDEA 产于捷克,开发人员以严谨著称的东欧程序员为主。IDEA 分为社区版和付费版两个版本。 我呢,一直是 Eclipse 的忠实粉丝,差不多十年的老用户了。很早就接触到了 IDEA...
面试还搞不懂redis,快看看这40道面试题(含答案和思维导图)
Redis 面试题 1、什么是 Redis?. 2、Redis 的数据类型? 3、使用 Redis 有哪些好处? 4、Redis 相比 Memcached 有哪些优势? 5、Memcache 与 Redis 的区别都有哪些? 6、Redis 是单进程单线程的? 7、一个字符串类型的值能存储最大容量是多少? 8、Redis 的持久化机制是什么?各自的优缺点? 9、Redis 常见性...
大学四年自学走来,这些珍藏的「实用工具/学习网站」我全贡献出来了
知乎高赞:文中列举了互联网一线大厂程序员都在用的工具集合,涉及面非常广,小白和老手都可以进来看看,或许有新收获。
为什么要推荐大家学习字节码?
配套视频: 为什么推荐大家学习Java字节码 https://www.bilibili.com/video/av77600176/ 一、背景 本文主要探讨:为什么要学习 JVM 字节码? 可能很多人会觉得没必要,因为平时开发用不到,而且不学这个也没耽误学习。 但是这里分享一点感悟,即人总是根据自己已经掌握的知识和技能来解决问题的。 这里有个悖论,有时候你觉得有些技术没用恰恰是...
【超详细分析】关于三次握手与四次挥手面试官想考我们什么?
在面试中,三次握手和四次挥手可以说是问的最频繁的一个知识点了,我相信大家也都看过很多关于三次握手与四次挥手的文章,今天的这篇文章,重点是围绕着面试,我们应该掌握哪些比较重要的点,哪些是比较被面试官给问到的,我觉得如果你能把我下面列举的一些点都记住、理解,我想就差不多了。 三次握手 当面试官问你为什么需要有三次握手、三次握手的作用、讲讲三次三次握手的时候,我想很多人会这样回答: 首先很多人会先讲下握...
压测学习总结(1)——高并发性能指标:QPS、TPS、RT、吞吐量详解
一、QPS,每秒查询 QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。互联网中,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。 二、TPS,每秒事务 TPS:是TransactionsPerSecond的缩写,也就是事务数/秒。它是软件测试结果的测量单位。一个事务是指一...
新程序员七宗罪
当我发表这篇文章《为什么每个工程师都应该开始考虑开发中的分析和编程技能呢?》时,我从未想到它会对读者产生如此积极的影响。那些想要开始探索编程和数据科学领域的人向我寻求建议;还有一些人问我下一篇文章的发布日期;还有许多人询问如何顺利过渡到这个职业。我非常鼓励大家继续分享我在这个旅程的经验,学习,成功和失败,以帮助尽可能多的人过渡到一个充满无数好处和机会的职业生涯。亲爱的读者,谢谢你。 -罗伯特。 ...
2019年Spring Boot面试都问了什么?快看看这22道面试题!
Spring Boot 面试题 1、什么是 Spring Boot? 2、Spring Boot 有哪些优点? 3、什么是 JavaConfig? 4、如何重新加载 Spring Boot 上的更改,而无需重新启动服务器? 5、Spring Boot 中的监视器是什么? 6、如何在 Spring Boot 中禁用 Actuator 端点安全性? 7、如何在自定义端口上运行 Sprin...
【图解】记一次手撕算法面试:字节跳动的面试官把我四连击了
字节跳动这家公司,应该是所有秋招的公司中,对算法最重视的一个了,每次面试基本都会让你手撕算法,今天这篇文章就记录下当时被问到的几个算法题,并且每个算法题我都详细着给出了最优解,下面再现当时的面试场景。看完一定让你有所收获 一、小牛试刀:有效括号 大部分情况下,面试官都会问一个不怎么难的问题,不过你千万别太开心,因为这道题往往可以拓展出更多有难度的问题,或者一道题看起来很简单,但是给出最优解,确实很...
面试官:关于Java性能优化,你有什么技巧
通过使用一些辅助性工具来找到程序中的瓶颈,然后就可以对瓶颈部分的代码进行优化。 一般有两种方案:即优化代码或更改设计方法。我们一般会选择后者,因为不去调用以下代码要比调用一些优化的代码更能提高程序的性能。而一个设计良好的程序能够精简代码,从而提高性能。 下面将提供一些在JAVA程序的设计和编码中,为了能够提高JAVA程序的性能,而经常采用的一些方法和技巧。 1.对象的生成和大小的调整。 J...
【图解算法面试】记一次面试:说说游戏中的敏感词过滤是如何实现的?
版权声明:本文为苦逼的码农原创。未经同意禁止任何形式转载,特别是那些复制粘贴到别的平台的,否则,必定追究。欢迎大家多多转发,谢谢。 小秋今天去面试了,面试官问了一个与敏感词过滤算法相关的问题,然而小秋对敏感词过滤算法一点也没听说过。于是,有了下下事情的发生… 面试官开怼 面试官:玩过王者荣耀吧?了解过敏感词过滤吗?,例如在游戏里,如果我们发送“你在干嘛?麻痹演员啊你?”,由于“麻痹”是一个敏感词,...
GitHub 标星 1.6w+,我发现了一个宝藏项目,作为编程新手有福了!
大家好,我是 Rocky0429,一个最近老在 GitHub 上闲逛的蒟蒻… 特别惭愧的是,虽然我很早就知道 GitHub,但是学会逛 GitHub 的时间特别晚。当时一方面是因为菜,看着这种全是英文的东西难受,不知道该怎么去玩,另一方面是一直在搞 ACM,没有做一些工程类的项目,所以想当然的以为和 GitHub 也没什么关系(当然这种想法是错误的)。 后来自己花了一个星期看完了 Pyt...
杭漂程序员2019的心路历程,还不起助学贷款,交不起房租,披荆斩棘终雨过天晴
一个杭漂2019的心酸历程,一路披荆斩棘终于还是雨过天晴。
我采访了同事,让他掏出了每天都会浏览的干货网站
前言只有光头才能变强。文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y在周六的晚上,我日常去到公司写文章。想写...
相关热词 c# singleton c#中类的默认值是 c#各种进制之间的转换 c# 正则表达式保留汉字 c#后台跨域 c#基础代码大全 c#指定combox选择 c#关系 mono c# 相差毫秒 用c#做一个简易计算器
立即提问