查看: 73900|回复: 86

linux socket编程实例

[复制链接]
发表于 2015-3-30 20:03:46 | 显示全部楼层 |阅读模式
本帖最后由 xiaoye 于 2015-9-30 18:45 编辑

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

服务器端
[C] 纯文本查看 复制代码
#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[MAXLINE];
  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]='\n';
      printf("recv msg from client:%s",buff);
      close(connect_fd);
      exit(0);
    }
    close(socket_fd);
  }





}


客户端
[C] 纯文本查看 复制代码
#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[4096],sendline[4096];
  char buf[MAXLINE];
  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[1],&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[rec_len]='\n';
    printf("recv:%s",buf);
    exit(0);

}
回复

使用道具 举报

发表于 2015-3-31 21:23:01 | 显示全部楼层
问题在于 socktet收发数据,其实不算是有问题,是库的问题。GCC升级了 函数变了

点评

我会说是if里面的判断也有问题吗?  发表于 2015-3-31 23:12
回复 支持 反对

使用道具 举报

发表于 2015-6-28 03:10:32 | 显示全部楼层
支持中国红客联盟(ihonker.org)
回复 支持 反对

使用道具 举报

发表于 2015-6-28 13:46:32 | 显示全部楼层
感谢楼主的分享~
回复 支持 反对

使用道具 举报

发表于 2015-6-29 07:40:16 | 显示全部楼层
支持中国红客联盟(ihonker.org)
回复 支持 反对

使用道具 举报

发表于 2015-6-29 16:03:42 | 显示全部楼层
支持,看起来不错呢!
回复 支持 反对

使用道具 举报

发表于 2015-6-30 15:52:33 | 显示全部楼层
还是不错的哦,顶了
回复 支持 反对

使用道具 举报

发表于 2015-7-1 17:01:03 | 显示全部楼层
学习学习技术,加油!
回复 支持 反对

使用道具 举报

发表于 2015-7-1 23:37:49 | 显示全部楼层
支持中国红客联盟(ihonker.org)
回复 支持 反对

使用道具 举报

发表于 2015-7-4 23:28:39 | 显示全部楼层
支持中国红客联盟(ihonker.org)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

旗下站点

邮箱系统

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2025-3-7 03:12 , Processed in 0.023893 second(s), 13 queries , Gzip On, MemCache On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部