王珂 发表于 2015-3-30 20:03:46

linux socket编程实例

本帖最后由 xiaoye 于 2015-9-30 18:45 编辑

最近在看linux编程,这是在网上找的一个代码,直接复制下来代码会有问题,这个已经修改过了

服务器端
#include"stdio.h"
#include "stdlib.h"
#include "string.h"
#include"errno.h"
#include"sys/types.h"
#include"sys/socket.h"
#include"netinet/in.h"
#define DEFAULT_PORT 6666
#define MAXLINE 4096

int main(int argc ,char ** argv){

int socket_fd,connect_fd;
struct sockaddr_in serveraddr;
char buff;
int n ;
if ((socket_fd=socket(AF_INET,SOCK_STREAM,0))==-1){
    printf("create socket error:%s(errorno:%d)",strerror(errno),errno);
    exit(0);

}
memset(&serveraddr,0,sizeof(serveraddr));
serveraddr.sin_family=AF_INET;
serveraddr.sin_addr.s_addr=htonl(INADDR_ANY);
serveraddr.sin_port=htons(DEFAULT_PORT);
if(bind(socket_fd,(struct sockaddr *)&serveraddr,sizeof(serveraddr))==-1){
    printf("bind socket error:%s(errorno:%d)",strerror(errno),errno);
    exit(0);
}
if(listen(socket_fd,10)==-1){
    printf("listen socket error");
    exit(0);
}

printf("====================wait for client==============");
while(1){
    if((connect_fd=accept(socket_fd,(struct sockaddr*)NULL,NULL))==-1){
      printf("accept error:%s(errorno:%d)\n",strerror(errno),errno);
      sleep(10);
      continue;
    }
    n=recv(connect_fd,buff,MAXLINE,0);
    if(!fork()){
      if(send(connect_fd,"hello,you are connect!\n",26,0)==-1){
        perror("send error");
        close(connect_fd);
        exit(0);
      }
      buff='\n';
      printf("recv msg from client:%s",buff);
      close(connect_fd);
      exit(0);
    }
    close(socket_fd);
}





}


客户端
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<errno.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>

#define MAXLINE 4096

int main(int argc, char ** argv){
int sockfd,n ,rec_len;
char recvline,sendline;
char buf;
struct sockaddr_in serveraddr;
if(argc!=2){
    printf("usage:./client <ipaddress> \n");
    exit(0);
}
if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0){
    printf("create socket error ");
    exit(0);
}
memset(&serveraddr, 0,sizeof(serveraddr));
serveraddr.sin_family=AF_INET;
serveraddr.sin_port=htons(6666);
if(inet_pton(AF_INET,argv,&serveraddr.sin_addr)<=0){
    printf("inet_ptos error");
    exit(0);
}
if(connect(sockfd,(struct sockaddr * )&serveraddr,sizeof(serveraddr))<0){
    printf("connetc error");
    exit(0);
}
printf("send msg to server :\n");
fgets(sendline,4096,stdin);
if(send(sockfd,sendline,strlen(sendline),0)<=0){
    printf("send msg error");
    exit(0);
}
if((rec_len=recv(sockfd,buf,MAXLINE,0))<=0){
      printf("recv error ");
      exit(0);
    }
    buf='\n';
    printf("recv:%s",buf);
    exit(0);

}

Antergone 发表于 2015-3-31 21:23:01

问题在于 socktet收发数据,其实不算是有问题,是库的问题。GCC升级了 函数变了

a136 发表于 2015-6-28 03:10:32

支持中国红客联盟(ihonker.org)

Micah 发表于 2015-6-28 13:46:32

感谢楼主的分享~

admin1964 发表于 2015-6-29 07:40:16

支持中国红客联盟(ihonker.org)

wtsqq123 发表于 2015-6-29 16:03:42

支持,看起来不错呢!

asion 发表于 2015-6-30 15:52:33

还是不错的哦,顶了

borall 发表于 2015-7-1 17:01:03

学习学习技术,加油!

wanmznh 发表于 2015-7-1 23:37:49

支持中国红客联盟(ihonker.org)

r00tc4 发表于 2015-7-4 23:28:39

支持中国红客联盟(ihonker.org)
页: [1] 2 3 4 5 6 7 8 9
查看完整版本: linux socket编程实例