精华内容
下载资源
问答
  • 我在2两台虚拟机上分别运行linux 服务端和客服端socket程序,客户端和服务端能正常通信,但是我用wireshark 抓包时确没抓到有这两个虚拟机的通信包,请问高手们这个是啥情况??
  • 虚拟机Linux socket通信异常

    千次阅读 2012-07-12 12:07:37
    最后查看hadoop源码,发现是socket通信问题。网上看过很多资料,也请教了很 多人,但是没有人有类似经验,一直解决不了,现在问题解决了,权且做个记录, 方便以后的朋友。 问题: 实验环境: 宿主机均是...

    最近在做Hadoop实验。根据错误提示发现是datanode通过ipc连接不上namenode。

    最后查看hadoop源码,发现是socket通信问题。网上看过很多资料,也请教了很

    多人,但是没有人有类似经验,一直解决不了,现在问题解决了,权且做个记录,

    方便以后的朋友。


    问题:

    实验环境:
    宿主机均是i7处理器(8核/16G)  
    虚拟机(客户机)均是VmWare workstation 8 中打开

    宿主机1:
    OS:win7
    IP 192.168.0.47
    宿主机1上虚拟机(fedora15):
    datanode007:IP 192.168.0.207(bridge)
    datanode008:IP 192.168.0.208(bridge)
    datanode009:IP 192.168.0.209(bridge)
    datanode010:IP 192.168.0.210(bridge)
    datanode011:IP 192.168.0.211(bridge)
    datanode012:IP 192.168.0.212(bridge)

    宿主机2:
    OS:win7
    IP 192.168.0.48
    宿主机2上虚拟机(fedora15):
    namenode:IP 192.168.0.200(bridge)
    datanode001:IP 192.168.0.201(bridge)
    datanode002:IP 192.168.0.202(bridge)
    datanode003:IP 192.168.0.203(bridge)

    宿主机3:
    OS:win7
    IP 192.168.0.49
    宿主机3上虚拟机(fedora15):
    datanode004:IP 192.168.0.204(bridge)
    datanode005:IP 192.168.0.205(bridge)
    datanode006:IP 192.168.0.206(bridge)

    症状:
    1,宿主机1~3及namenode/datanode001~012两两之间都能ping通,
    2,namenode/datanode001~012两两之间都能通过ssh远程登入。
    3,在宿主机1上的客户机datanode007~012之间socket通信正常,通过socket程序
    (sever.c/client.c)测试验证过.
    4,在宿主机2上的客户机namenode/datanode001~003之间socket通信正常,通过socket程序
    (sever.c/client.c)测试验证过.hadoop启动成功信息也正常,livenodes为4(namenode也
    设置为slave,如果不设置,则为3)
    5,在宿主机3上的客户机datanode004~005之间socket通信正常,通过socket程序
    (sever.c/client.c)测试验证过.
    6,在宿主机1上的客户机datanode007~012任一与宿主机2上的客户机namenode/datanode001~003
    任一之间socket通信异常,通过socket程序(sever.c/client.c)测试验证失败.

    7,任一两个datanode移到同一宿主机,socket通信恢复正常.
    测试条件客户机防火墙关闭,宿主机/客户机都设置不代理联网,结果均相同。
    实在想不出还有什么问题了。

    提示:
    1,各个客户机ping自己耗时0.016ms左右(直接)
    2,同一宿主机内客户机两两互ping耗时0.17ms左右(直接)
    3,跨宿主机之间客户机两两互ping耗时1.8ms左右(报文通过宿主机IP中转)
    4,个人觉得VmWare workstation 8在bridge联网模式下并非直接联网,通过禁用
    宿主机本地网卡验证过。如,禁止宿主机2本地网卡后,namenode/datanode001~003
    之间两两还是能够互ping,但是显然不能ping同宿主机2,且也不能ping通其它宿主机
    及任一其它宿主机上的客户机。


    问题解决了,是宿主机windows防火墙和杀毒软件开着的缘故,两个都需要设置才行。

    解决方案:关闭windows防火墙(如果集群是内网,那么可以
              选择关闭内网防火墙;如果是域用户的话,那么
              还需要关闭域用户防火墙)
              关闭杀毒软件(可以单独关闭网络过滤那一栏,如果
              有时间可以自己测试添加socket通信端口至非过滤列表)
              以上两个要同时设定,否则还是被过滤的。
       问题:为什么防火墙不关闭时,ssh通信完全正常,但是socket通信异常。
    展开全文
  • linux 本地socket通信

    千次阅读 2016-08-10 11:05:46
    linux 本地socket通信linux中的进程间通信,不仅仅有消息队列,共享内存,管道,等! 本地socket也是不错的机制,效率只比消息队列低一点。#include #include #include #include #include #include #inc

    linux 本地socket通信

    在linux中的进程间通信,不仅仅有消息队列,共享内存,管道,等!
    本地socket也是不错的机制,效率只比消息队列低一点。

    #include <ctype.h>
    #include <dlfcn.h>
    #include <dirent.h>
    #include <errno.h>
    #include <fcntl.h>
    #include <inttypes.h>
    #include <pthread.h>
    #include <semaphore.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <sys/socket.h>
    #include <sys/select.h>
    #include <sys/types.h>
    #include <sys/un.h>
    #include <sys/wait.h>
    #include <sys/mman.h>
    
    
    #define ALOGD printf
    #define ALOGE printf
    #define ALOGI printf
    
    
    int create_socket(const char *name) {
        struct sockaddr_un addr;
        int sockfd, ret;
    
        sockfd = socket(PF_UNIX, SOCK_STREAM, 0);
        if(sockfd < 0) {
            ALOGD("Failed to open socket '%s': %s\n", name, strerror(errno));
            return -1;
        }
    
        memset(&addr, 0, sizeof(addr));
        addr.sun_family = AF_UNIX;
        snprintf(addr.sun_path, sizeof(addr.sun_path), "%s", name);
    
        ret = unlink(addr.sun_path);
    
        if(ret != 0 && errno != ENOENT) {
            ALOGD("Failed to unlink old socket '%s': %s\n", name, strerror(errno));
            close(sockfd);
            return -1;
        }
        ret = bind(sockfd, (struct sockaddr *) &addr, sizeof(addr));
        if(ret) {
            ALOGD("Failed to bind socket '%s': %s\n", name, strerror(errno));
            unlink(addr.sun_path);
            close(sockfd);
            return -1;
        }
    
    
        chmod(addr.sun_path, (mode_t) 0660);
        ALOGD("Created socket %s with sockfd=%d\n", addr.sun_path, sockfd);
    
        return sockfd;
    }
    
    
    /**
     * Connect to server, Never return if connect fail
     * @return Sock fd.
     */
    int connect_server(const char *path) {
    
        struct sockaddr_un server;
        socklen_t alen = 0;
        int sock, ret = 0;
    
        if(path == NULL)
            return -1;
    
        sock = socket(PF_UNIX, SOCK_STREAM, 0);
        if(sock < 0) {
            ALOGE("Failed to open socket '%s': %s\n", path, strerror(errno));
            return -1;
        }
        /** Initialize address structure */
        memset(&server, 0, sizeof(struct sockaddr_un));
    
        /** Set address family to unix domain sockets */
        server.sun_family = AF_UNIX;
    
        /** Set address to the requested pathname */
        snprintf(server.sun_path, sizeof(server.sun_path), "%s", path);
    
        /** Get length of pathname */
        alen = strlen(server.sun_path) + sizeof(server.sun_family);
    
        while(1) {
            ret = connect(sock, (struct sockaddr *) &server, alen);
            if(ret == 0)
                break;
    
            sleep(1);
        }
        ALOGI("Connected to server socket '%s': sock=%d", path, sock);
    
        return sock;
    }

    通过create_socket的函数,建立本地socket节点。
    例如:create_socket("/dev/socket/server_socket");
    通过connect_server的函数,建立于服务节点的通信。
    例如:connect_server("/dev/socket/server_socket");

    static void *server_accepting_thread(void *) {
        signal(SIGUSR1, signal_handler);
    
        int client_fd;
        struct sockaddr_un addr;
        socklen_t addr_size = sizeof(addr);
    
        int sockfd = create_socket(SOCKET);
    
        if(sockfd < 0)
            return NULL;
    
        listen(sockfd, 8);
        sem_post(&g_sem_accept_ready);
    
        msg_t msg;
    
        while(1) {
            client_fd = -1;
            memset(&msg, 0, sizeof(msg));
            if((client_fd = accept(sockfd, (struct sockaddr *) &addr, &addr_size)) < 0) {
                continue;
            }
    
            ALOGI("client_fd=%d connected\n", client_fd);
            TEMP_FAILURE_RETRY(recv(client_fd, &msg, sizeof(msg), MSG_WAITALL));
            ALOGI("client_fd=%d connected module is %s, msg is %s\n", client_fd, msg.module, msg.msg);
            /*Set to module */
            module_set_fd(msg.module, client_fd, msg.msg);
    
        }
        return NULL;

    注意::
    TEMP_FAILURE_RETRY(recv(client_fd, &msg, sizeof(msg), MSG_WAITALL));
    它的功能: 不断地从套接口中接收客户端的“say_hello”数据直到成功为止。需要客户端实现。
    保证通信正常。易于调试。
    //使用MSG_WAITALL时,sockfd必须处于阻塞模式下,否则不起作用。
    //所以MSG_WAITALL不能和MSG_NONBLOCK同时使用。
    客户端可以通过recv接受数据

            if((recv_size = recv(sock, msg, sizeof(msg_t), MSG_WAITALL)) < 0) {
                ALOGE("%s:Recv fail: %s, received size:%d\n", __FUNCTION__, strerror(errno), recv_size);
                break;
            }
    展开全文
  • C# winform实现与linux socket通信

    千次阅读 2017-07-13 13:36:18
    //建立服务端socket通信,绑定端口 int EstablishServer( struct sockaddr_in *addr,socklen_t addrLen, int port) { int listenfd=socket(AF_INET,SOCK_STREAM, 0 ); if (listenfd< 0 ) { perror( ...

    windows 主机下winform Form1.cs代码:

    //Form1.cs
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    using System.Net;
    using System.Threading;
    using System.Net.Sockets;
    
    using System.IO; 
    
    namespace storage_app
    {
        public partial class Form1 : Form
        {
            public Socket newclient;
            public bool Connected;
            public Thread myThread;
            public delegate void MyInvoke(string str); 
    
            public Form1()
            {
    
                InitializeComponent();
                StartPosition = FormStartPosition.CenterScreen;
                //关闭对文本框的非法线程操作检查
                TextBox.CheckForIllegalCrossThreadCalls = false;
            }
            //Thread threadclient = null;
            Socket socketclient = null;
            List<IPEndPoint> mlist = new List<IPEndPoint>();  
    
            private void conn_btn_Click(object sender, EventArgs e)
            {
                this.conn_btn.Enabled = false;
                socketclient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                string ipadd = "192.168.66.666";
                int port = 8866;
                IPEndPoint ie = new IPEndPoint(IPAddress.Parse(ipadd), port);
                try
                {
                    //客户端套接字连接到网络节点上,用的是Connect
                    socketclient.Connect(ie);
                    string sendStr = "hello!This is a socket test";
                    byte[] bs = Encoding.ASCII.GetBytes(sendStr);
                    socketclient.Send(bs, bs.Length, 0);//发送测试信息
                    string recvStr = "";
                    byte[] recvBytes = new byte[1024];
                    int bytes;
                    bytes = socketclient.Receive(recvBytes, recvBytes.Length, 0);//从服务器端接受返回信息
                    recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);
                    MessageBox.Show("连接成功!\r\n");
    
                }
                catch (Exception cone)
                {
                    //MessageBox.
                    MessageBox.Show("连接失败\r\n"+cone.ToString());
                    this.conn_btn.Enabled = true;
                    return;
                }
    
    
                //threadclient.IsBackground = true;
    
                //threadclient.Start();
    
            }
    
    
            //获取当前系统时间
            private DateTime GetCurrentTime()
            {
                DateTime currentTime = new DateTime();
                currentTime = DateTime.Now;
                return currentTime;
            }
    
        }
    }
    

    linux 服务端代码:

    //server.cpp
    #include<iostream>
    #include<stdlib.h>
    #include<stdio.h>
    #include<sys/socket.h>
    #include<sys/epoll.h>
    #include<netinet/in.h>
    #include<arpa/inet.h>
    #include<fcntl.h>
    #include<errno.h>
    #include<unistd.h>
    #include<string.h>
    #include<netinet/tcp.h>
    #define SERVER_PORT 8866
    #define LENGTH_OF_LISTEN_QUEUE 20
    #define MAXBUF 100
    
    using namespace std;
    int EstablishServer(struct sockaddr_in *addr,socklen_t addrLen,int port);
    void *HeartService(void *arg);
    void setnonblocking(int sock);
    
    int main()
    {
        struct sockaddr_in server_addr,client_addr;
        int serverFd,clientFd;
        socklen_t clientLen=sizeof(struct sockaddr);
        //建立socket连接
        serverFd=EstablishServer(&server_addr,sizeof(server_addr),SERVER_PORT);
        if(serverFd==-1)
        {
            cout<<"serverFd create failed!"<<endl;
            exit(1);
        }
        for(;;)
        {
            //等待连接的请求
            if((clientFd=accept(serverFd,(struct sockaddr*)&client_addr,&clientLen))<0)
            {
                perror("accept wrong !:");
                exit(1);
            }
            cout<<"----------------------------------------------------------------"<<endl;
            printf("accept from %s:%d\n",inet_ntoa(client_addr.sin_addr),client_addr.sin_port);
            pthread_t clientTid;
            int pthrst=pthread_create(&clientTid,NULL,HeartService,(void*)&clientFd);
            if(pthrst!=0)
            {
                perror("pthread_create wrong ! :");
            }       
        }
        return 0;
    }
    //建立服务端socket的通信,绑定端口
    int EstablishServer(struct sockaddr_in *addr,socklen_t addrLen,int port)
    {
        int listenfd=socket(AF_INET,SOCK_STREAM,0);
        if(listenfd<0)
        {
            perror("listenfd socket error");
            return -1;
        }
        bzero(addr,addrLen);
        addr->sin_family=AF_INET;
        addr->sin_addr.s_addr=htonl(INADDR_ANY);
        addr->sin_port=htons(port);
        if(bind(listenfd,(struct sockaddr*)addr,addrLen)<0)
        {
            perror("bind error");
            return -1;
        }
        if(listen(listenfd,LENGTH_OF_LISTEN_QUEUE)<0)
        {
            perror("listen error");
            return -1;
        }
        return listenfd;
    }
    //心跳机制线程
    void *HeartService(void *arg)
    {
        //获得自身的线程号
        pthread_t tid=pthread_self();
        //获得传送过来的clientFd
        int clientFd=*(int *)arg;
        cout<<"New thread create,the tid is "<<tid<<" the clientFd is "<<clientFd<<endl;
        int sockfd;//用于获取epoll函数的fd值
        char buf[MAXBUF];
        int epfd,nfds,n,m,count=0;
        struct epoll_event ev,events[20];//声明epoll_event结构体的变量,ev用于注册事件,events数组用于回传要处理的事件
        int keepAlive=1;//开启keepalive属性
        int keepIdle=5;//如该连接在5秒内没有任何数据往来,则进行探测
        int keepInterval=2;//探测时发包的时间间隔为2秒
        int keepCount=3;//探测尝试的次数。如果第1次探测包就收到响应了,则后2次的不再发送
        setsockopt(clientFd,SOL_SOCKET,SO_KEEPALIVE,(void *)&keepAlive,sizeof(keepAlive));
        setsockopt(clientFd,SOL_TCP,TCP_KEEPIDLE,(void *)&keepIdle,sizeof(keepIdle));
        setsockopt(clientFd,SOL_TCP,TCP_KEEPINTVL,(void *)&keepInterval,sizeof(keepInterval));
        setsockopt(clientFd,SOL_TCP,TCP_KEEPCNT,(void *)&keepCount,sizeof(keepCount));
        //把客户端的socket设置为非阻塞方式
        setnonblocking(clientFd);
        epfd=epoll_create(256);//生成epoll专用的文件描述符,指定生成描述符的最大范围为256
        ev.data.fd=clientFd;
        ev.events=EPOLLIN|EPOLLET;
        epoll_ctl(epfd,EPOLL_CTL_ADD,clientFd,&ev);
        for(;;)
        {
            nfds=epoll_wait(epfd,events,20,-1);
            cout<<"the tid is "<<tid<<" the clientFd is "<<clientFd<<" the count is "<<++count<<endl;
            for(int i=0;i<nfds;++i)
            {
                if(events[i].events&EPOLLIN)
                {
                    if((sockfd=events[i].data.fd)<0)
                    {
                        cout<<"It is recevied continue!"<<endl;
                        continue;//因为下面设置了,所以这里考虑了
                    }
                    if((n=recv(sockfd,buf,MAXBUF,0))<0)
                    {
                        if(errno==ECONNRESET)//表示连接被重置了,已经无效了,关闭它,删除它
                        {
                            printf("It is ECONNRESET:%s\n",strerror(ECONNRESET));
                            epoll_ctl(epfd,EPOLL_CTL_DEL,sockfd,NULL);//可以把这个sockfd从epfd队列中删除了
    
                        }
                        else if(errno==ETIMEDOUT)
                        {
                            cout<<"Ha Ha you want ETIMEDOUT"<<endl;
    
                        }
                        else
                            cout<<"read error!"<<endl;  //其他错误
                        epoll_ctl(epfd,EPOLL_CTL_DEL,sockfd,NULL);
                        return 0;
                    }
                    else if(n==0)//有读事件触发,但是read返回0,所以是对面已经关闭sockfd了
                    {
                        cout<<"n=0 ,sockfd is "<<sockfd<<" and tid is "<<tid<<endl;
                        epoll_ctl(epfd,EPOLL_CTL_DEL,sockfd,NULL);
                        close(sockfd);
                    }
                    else
                    {
                        buf[n]='\0';
                        cout<<"received:"<<buf<<" and sockfd is "<<sockfd<<endl;
                        ev.data.fd=sockfd;
                        ev.events=EPOLLOUT|EPOLLET;
                        epoll_ctl(epfd,EPOLL_CTL_MOD,sockfd,&ev);
                    }
                }
                else if(events[i].events&EPOLLOUT)
                {
                    sockfd=events[i].data.fd;
                    m=strlen(buf);
                    cout<<"m is "<<m<<endl;
                    if(write(sockfd,buf,m)<0)
                    {
                        cout<<"write wrong ! and sockfd is:"<<sockfd<<endl;
                    }
                    else
                    {
                        cout<<"send success and buf is "<<buf<<endl;
                    }
    
                    ev.data.fd=sockfd;
                    ev.events=EPOLLIN|EPOLLET;
                    epoll_ctl(epfd,EPOLL_CTL_MOD,sockfd,&ev);//修改sockfd上要处理的事件为EPOLLIN,下次监听读事件 
                }
            }
        }  
    }
    void setnonblocking(int sock)
    {
        int opts;
        opts=fcntl(sock,F_GETFL);//把sock的属性查询出来,存到opts中
        if(opts<0)
        {
            perror("fcntl(sock,GETFL)");
            exit(1);
        }
        opts=opts|O_NONBLOCK;//把opts中的某一位O_NONBLOCK置为生效
        if(fcntl(sock,F_SETFL,opts)<0)
        {
            perror("fcntl(sock,SETFL,opts)");
            exit(1);
        }
    }

    参考:http://blog.csdn.net/liujiakunit/article/details/9772283

    展开全文
  • 我在linux虚拟上建立了socket服务器,物理为windows10,在安卓上建立socket客户端,是在Android Studio上写的,准备进行简单的socket通信。 当我在Android Studio上用安卓模拟器时,可以成功通信并处理。但我...
  • Linux Socket TCP通信

    千次阅读 2012-03-31 09:49:27
    /*socket tcp服务器端*/ #include #include #include #include #include #include #include #include #include #include #include #include #define SERVER_PORT 5555 int main() { int ser

    1. Server端

    /*socket tcp服务器端*/
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <errno.h>
    #include <netdb.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <unistd.h>
    
    #define SERVER_PORT 5555
    
    int main()
    {
    	int serverSocket;
    	struct sockaddr_in server_addr;
    	struct sockaddr_in clientAddr;
    	int addr_len = sizeof(clientAddr);
    	int client;
    	char buffer[200];
    	int iDataNum;
    
    	if((serverSocket = socket(AF_INET, SOCK_STREAM, 0)) < 0)
    	{
    		perror("socket");
    		return 1;
    	}
    
    	bzero(&server_addr, sizeof(server_addr));
    	server_addr.sin_family = AF_INET;
    	server_addr.sin_port = htons(SERVER_PORT);
    	server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    	if(bind(serverSocket, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0)
    	{
    		perror("connect");
    		return 1;
    	}
    
    	if(listen(serverSocket, 5) < 0) 
    	{
    		perror("listen");
    		return 1;
    	}
    
    	while(1)
    	{
    		printf("Listening on port: %d\n", SERVER_PORT);
    		client = accept(serverSocket, (struct sockaddr*)&clientAddr, (socklen_t*)&addr_len);
    		if(client < 0)
    		{
    			perror("accept");
    			continue;
    		}
    		printf("\nrecv client data...n");
    		printf("IP is %s\n", inet_ntoa(clientAddr.sin_addr));
    		printf("Port is %d\n", htons(clientAddr.sin_port));
    		while(1)
    		{
    			iDataNum = recv(client, buffer, 1024, 0);
    			if(iDataNum < 0)
    			{
    				perror("recv");
    				continue;
    			}
    			buffer[iDataNum] = '\0';
    			if(strcmp(buffer, "quit") == 0)
    				break;
    			printf("%drecv data is %s\n", iDataNum, buffer);
    			send(client, buffer, iDataNum, 0);
    		}
    	}
    	return 0;
    }

    2. client端

    /*socket tcp客户端*/
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <errno.h>
    #include <netdb.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <unistd.h>
    
    #define SERVER_PORT 5555
    
    int main()
    {
    	int clientSocket;
    	struct sockaddr_in serverAddr;
    	char sendbuf[200];
    	char recvbuf[200];
    	int iDataNum;
    	if((clientSocket = socket(AF_INET, SOCK_STREAM, 0)) < 0)
    	{
    		perror("socket");
    		return 1;
    	}
    
    	serverAddr.sin_family = AF_INET;
    	serverAddr.sin_port = htons(SERVER_PORT);
    	serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
    	if(connect(clientSocket, (struct sockaddr *)&serverAddr, sizeof(serverAddr)) < 0)
    	{
    		perror("connect");
    		return 1;
    	}
    
    	printf("connect with destination host...\n");
    
    	while(1)
    	{
    		printf("Input your world:>");
    		scanf("%s", sendbuf);
    		printf("\n");
    
    		send(clientSocket, sendbuf, strlen(sendbuf), 0);
    		if(strcmp(sendbuf, "quit") == 0)
    			break;
    		iDataNum = recv(clientSocket, recvbuf, 200, 0);
    		recvbuf[iDataNum] = '\0';
    		printf("recv data of my world is: %s\n", recvbuf);
    	}
    	close(clientSocket);
    	return 0;
    }


    展开全文
  • linux socket进程通信

    万次阅读 2012-03-16 10:08:39
    socket进程通信与网络通信使用的是统一套接口,只是地址结构与某些参数不同。 一。创建socket服务端的流程如下: (1)创建socket,类型为AF_LOCAL或AF_UNIX,表示用于进程通信: int server_fd; int client_...
  • Linux socket通信——并发服务器(fork)

    千次阅读 2015-04-24 10:52:42
    迭代服务器会依次处理客户端的连接 ,只要当前连接的任务没有完成,服务器的进程就会一直被占用,直到任务完成后,服务器关闭这个socket,释放连接。 它的原型可以描述成: while(1) { new_fd = 服务器accept...
  • Linux Socket UDP对等通信

    千次阅读 2012-03-31 09:47:58
    /*socket udo示例程序 * 由于UDP是一种对等通信,是不区分服务器端和客户端的*/ #include #include #include #include #include #include #include #include #include #include #include #include #...
  • socket tcp 通信 绑定了ip 和 port 正常顺序 客户端发起socket 服务端收到socket的时候 没有问题 但是有时候,顺序错误,就导致程序死了 再起运行程序的时候 发现bind error:Address already in...
  • 这篇文章主要是给大家分享Linux利用 Socket 通信实现网络聊天程序 1.【问题描述】 在 Linux 环境下,利用 Socket 通信实现网络聊天程序,主要包括以下功能: ⑴ 写一个 shell 脚本,实现聊天界面的显示、用户的注册、...
  • linux c socket通信

    千次阅读 2010-12-03 13:58:00
    file_server.c 文件传输顺序服务器示例 ////////////////////////////////////////////////////////////////////////////////////// //文件是服务器的代码 #include <net
  • Linuxsocket编程实现客户服务器通信的例子经典的在同一台主机上两个进程或线程之间的通信通过以下三种方法 管道通信(Pipes) 消息队列(Message queues) 共享内存通信(Shared memory) 这里有许多其他的方法...
  • socket也即套接字接口,实际上也就是网络上的通信节点。...LINUX中,程序员可以不必关心通信协议而专注应用程序开发。根据数据传送方式,可以把socket分成面向连接的数据流通信和无连接的数据报通信通信过程如下:
  • Linux之本地Socket通信

    万次阅读 2018-03-01 15:38:24
    一、Sokcet 学习路径1:http://blog.csdn.net/u010073981/article/details/50734484 学习路径2:https://www.cnblogs.com/cy568searchx/p/4211124.html 学习路径3:...为了防止资源丢失,整合如下...
  • 1、检查是否能够两之间是否能够互相ping通 1)主机与虚拟机的网络通信采用NAT方式,具体实现自行百度~虚拟机要上网这一步肯定必不可少的 2)在1)之后虚拟机应该是可以正常ping通主机的。如果主机不能ping通...
  • (1)无连接的socket通信相对于有连接的socket通信较为简单,因为在传输过程中不保证能否到达,常用于对数据要求不高的地方。由于省去了很多开销,它的传输速度比有连接的socket通信要快,使用UDP传输数据。数据通信...
  • C语言实现windows和linuxsocket通信

    千次阅读 2016-03-24 00:16:27
    client on windows and server on linux
  • 两台Linux虚拟机socket通信(Version 1.0)

    千次阅读 2019-07-07 09:19:41
    下面的两个程序实现了这样的功能: 客户端每1s产生一个随机数, 之后将... 这个程序的思路可用于PC和ARM开发板间的数据通信. // server.c 服务端 #include <stdio.h> #include <stdlib.h> #include...
  • Linux socket 本地进程间通信

    千次阅读 2016-02-26 01:00:42
    socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。Socket就是该模式的一个实现, socket即是一种特殊的文件,一些socket...
  • Linux C语言实现的Socket通信

    千次阅读 2011-12-19 00:24:36
    其实这篇文章就是前面一篇文章的复制体,主要是今天闲着无聊,就在Ubuntu下又写了一篇这个传说中的简单Socket通信。 以下是Linux网络编程的函数说明 'socket' Function To perform network I/O, the ...
  • 这个问题之前没有怎么留意过,是最近在面试过程中遇到...关闭socket分为主动关闭(Active closure)和被动关闭(Passive closure)两种情况。前者是指有本地主机主动发起的关闭;而后者则是指本地主机检测到远程主机发
  • linux 进程间使用unix socket通信

    千次阅读 2017-08-27 17:45:15
    前言:前些天实现了unix socket通信想完完全全自己写一篇博客记录下来,但写的时候发现对于socket知识的理解还有所欠缺,故引用其他博客写的比较好的部分综合一下,这样让大家更容易理解。 一、Unix socket...
  • linuxsocket通信程序例子

    千次阅读 2012-06-12 17:47:00
    //accept函数返回一个新的socket,这个socket(new_server_socket)用于同连接到的客户的通信 065   //new_server_socket代表了服务器和客户端之间的一个通信通道 ...
  • Linux Windows Socket通信 端口开启

    千次阅读 2015-04-23 10:14:37
    但是,我们完全可以利用简单的代码来说明socket通信问题,能做到这一点就足够了。这也是我一直推崇的方法,用最简单的代码表达最实际的功能。 windows侧的client代码, #include #include #pragma ...
  • 最近在学习socket编程,在网上找到一个很好的实例,于是按自己的想把代码修改了一下,算半原创了~~~~ 要保存起来常复习呀~~~ /////////////////////////////////////////////////////////////////////////////////...
  • linux下c编程socket通信

    千次阅读 2016-05-03 13:30:03
    建立socket。int sockfd = socket(AF_FAMILY,SOCK_STREAM,0); 绑定IP和端口。bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr)); 开启listen。listen(sockfd,5); 循环accept。int newfd =...
  • LinuxSOCKET编程详解

    万次阅读 多人点赞 2012-04-10 17:44:52
    LinuxSOCKET编程详解 1. 网络中进程之间如何通信 进 程通信的概念最初来源于单机系统。由于每个进程都在自己的地址范围内运行,为保证两个相互通信的进 程之间既互不干扰又协调一致工作,操作系统为进程...
  • ARM_Linux和虚拟机linux通过socket通信

    千次阅读 2017-03-15 10:14:59
    首先保证ARM_linux和虚拟机linux可以ping通,然后应该没什么问题 参考来源:http://blog.csdn.net/chencheng126/article/details/44260799 客户端:client.c #include<sys/socket.h> #include #...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 113,337
精华内容 45,334
关键字:

linuxsocket通信本机

linux 订阅