您的位置:首页 > 理论基础 > 计算机网络

linux网络设备测试-----socket

2015-04-10 16:57 253 查看
/*******************************

* 客户端程序 *

********************************/

#include <stdio.h>

#include <stdlib.h>

#include <errno.h>

#include <string.h>

#include <netdb.h>

#include <sys/types.h>

#include <netinet/in.h>

#include <sys/socket.h>

int main(int argc,char *argv[])

{

int sockfd,numbytes;

char buf[100];

struct hostent *he;

struct sockaddr_in their_addr;

//从输入的命令行的第2个参数获取服务器的IP地址

he = gethostbyname(argv[1]);

//客户端建立TCP协议的socket套接字描述符

if((sockfd = socket(AF_INET,SOCK_STREAM,0))==-1)

{

perror("socket");

exit(1);

}

//客户端初始化结构体,连接到服务器的4321端口

their_addr.sin_family = AF_INET;

their_addr.sin_port = htons(4321);

their_addr.sin_addr = *((struct in_addr *)he->h_addr);

bzero(&(their_addr.sin_zero),8);

//向服务器发起连接

if(connect(sockfd,(struct sockaddr *)&their_addr,sizeof(struct sockaddr_in))==-1)

{

perror("connect");

exit(1);

}

//向服务器发送字符串"hello!"

if(send(sockfd,"Hello! I am Client.",100,0)==-1)

{

perror("send");

exit(1);

}

//接收从服务器返回的信息

if(recv(sockfd,buf,100,0)==-1)

{

perror("recv");

exit(1);

}

printf("result: %s \n",buf);

/*通信结束*/

close(sockfd);

return 0;

}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

makefile:

EXTRA_LIBS += -lpthread

CC=gcc

EXEC = ./client

OBJS = client.o

all: $(EXEC)

$(EXEC): $(OBJS)

$(CC) $(LDFLAGS) -o $@ $(OBJS) $(EXTRA_LIBS)

install:

$(EXP_INSTALL) $(EXEC) $(INSTALL_DIR)

clean:

-rm -f $(EXEC) *.elf *.gdb *.o

_____________________________________________________

/*******************************

* server.c *

********************************/

#include <sys/types.h>//socket

#include <sys/socket.h>//socket

#include <stdio.h>//printf

#include <stdlib.h>//exit

#include <errno.h>

#include <string.h>//bzero

//#include <unistd.h>

#include <netinet/in.h>//sockaddr_in

#define SERVER_PORT 4321

int main()

{

int sockfd,new_fd;

struct sockaddr_in my_addr;

struct sockaddr_in their_addr;

int sin_size;

char buff[100];

//服务器建立TCP协议的socket套接字描述符

if((sockfd = socket(AF_INET,SOCK_STREAM,0))==-1)

{

perror("socket");

exit(1);

}

printf("socket success!,sockfd=%d\n",sockfd);

//初始化sockaddr结构体,绑定4321端口

my_addr.sin_family = AF_INET;

my_addr.sin_port = htons(SERVER_PORT);

my_addr.sin_addr.s_addr = INADDR_ANY;

bzero(&(my_addr.sin_zero),8);

//绑定套接字描述符sockfd

if(bind(sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr_in))==-1)

{

perror("bind");

exit(1);

}

printf("bind success!\n");

//创建监听套接字描述符sockfd

if(listen(sockfd,10)==-1)

{

perror("listen");

exit(1);

}

printf("listening....\n");

//服务器阻塞监听套接字,等待客户端程序连接

while(1)

{

sin_size = sizeof(their_addr);

// 如果创建连接,将产生一个全新的套接字

if((new_fd = accept(sockfd,(struct sockaddr *)&their_addr,&sin_size))==-1)

{

perror("accept");

exit(1);

}

// bzero(buff, 100);

//生成一个子进程来完成和客户端的会话,父进程继续监听

if(!fork())

{

//读取客户端发来的信息

if(recv(new_fd,buff,100,0)==-1)

{

perror("recv");

exit(1);

}

printf(" %s\n",buff);

//发送信息到客户端

if(send(new_fd,"Welcome,This is Server.",50,0)==-1)

perror("send");

/*本次通信结束*/

close(new_fd);

exit(0);

}

/*下一个循环*/

}

close(sockfd);

}

/*

root@1[server]# ./server

server is run: Success

Hello! Client connect.

root@2[client]# .client 192.168.1.99

result: Welcome,This is Server.

*/

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

makefile:

EXTRA_LIBS += -lpthread

CC = arm-poky-linux-gnueabi-gcc

EXEC = ./server

OBJS = server.o

all: $(EXEC)

$(EXEC): $(OBJS)

$(CC) $(LDFLAGS) -o $@ $(OBJS) $(EXTRA_LIBS)

install:

$(EXP_INSTALL) $(EXEC) $(INSTALL_DIR)

clean:

-rm -f $(EXEC) *.elf *.gdb *.o
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: