Linux下的socket是怎么回事,如何利用其实现局域网内的数据处理?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux下的socket是怎么回事,如何利用其实现局域网内的数据处理?相关的知识,希望对你有一定的参考价值。
参考技术A //服务端server.c#include
<stdio.h>
#include
<stdlib.h>
#include
<errno.h>
#include
<string.h>
#include
<sys/types.h>
#include
<netinet/in.h>
#include
<sys/socket.h>
#include
<sys/wait.h>
#define
SERVPORT
6000
/*服务器监听端口号
*/
#define
BACKLOG
10
/*
最大同时连接请求数
*/
#define
MAXDATASIZE
100
main()
char
buf[MAXDATASIZE];
int
sockfd,client_fd;
/*sock_fd:监听socket;client_fd:数据传输socket
*/
struct
sockaddr_in
my_addr;
/*
本机地址信息
*/
struct
sockaddr_in
remote_addr;
/*
客户端地址信息
*/
if
((sockfd
=
socket(AF_INET,
SOCK_STREAM,
0))
==
-1)
perror("socket创建出错!");
exit(1);
my_addr.sin_family=AF_INET;
my_addr.sin_port=htons(SERVPORT);
my_addr.sin_addr.s_addr
=
INADDR_ANY;
bzero(&(my_addr.sin_zero),8);
if
(bind(sockfd,
(struct
sockaddr
*)&my_addr,
sizeof(struct
sockaddr))
==
-1)
perror("bind出错!");
exit(1);
if
(listen(sockfd,
BACKLOG)
==
-1)
perror("listen出错!");
exit(1);
while(1)
sin_size
=
sizeof(struct
sockaddr_in);
if
((client_fd
=
accept(sockfd,
(struct
sockaddr
*)&remote_addr,
&sin_size))
==
-1)
perror("accept出错");
continue;
printf("received
a
connection
from
%s\n",
inet_ntoa(remote_addr.sin_addr));
if
(!fork())
/*
子进程代码段
*/
if
((recvbytes=recv(client_fd,
buf,
MAXDATASIZE,
0))
==-1)
perror("recv出错!");
close(client_fd);
exit(0);
buf[recvbytes]
=
'\0';
printf("from
client
Received:
%s",buf);
if
(send(client_fd,
"thanks!\n",
8,
0)
==
-1)
perror("send出错!");
close(client_fd);
exit(0);
close(client_fd);
//客户端client.c
#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>
#define
SERVPORT
6000
#define
MAXDATASIZE
100
main(int
argc,
char
*argv[])
int
sockfd,
recvbytes;
char
buf[MAXDATASIZE];
struct
hostent
*host;
struct
sockaddr_in
serv_addr;
if
(argc
<
2)
fprintf(stderr,"Please
enter
the
server's
hostname!\n");
exit(1);
if((host=gethostbyname(argv[1]))==NULL)
herror("gethostbyname出错!");
exit(1);
if
((sockfd
=
socket(AF_INET,
SOCK_STREAM,
0))
==
-1)
perror("socket创建出错!");
exit(1);
serv_addr.sin_family=AF_INET;
serv_addr.sin_port=htons(SERVPORT);
serv_addr.sin_addr
=
*((struct
in_addr
*)host->h_addr);
bzero(&(serv_addr.sin_zero),8);
if
(connect(sockfd,
(struct
sockaddr
*)&serv_addr,
sizeof(struct
sockaddr))
==
-1)
perror("connect出错!");
exit(1);
if
(send(sockfd,
"hello!\n",
7,
0)
==
-1)
perror("send出错!");
exit(1);
if
((recvbytes=recv(sockfd,
buf,
MAXDATASIZE,
0))
==-1)
perror("recv出错!");
exit(1);
buf[recvbytes]
=
'\0';
printf("Received:
%s",buf);
close(sockfd);
linux 中make命令出错是怎么回事了
不是Linux
中的
make
命令出错,而是你的
makefile
文件中的文法、或者编译源程序的先后顺序有问题,所以导致
make
命令无法编译多个源程序。make
命令对
makefile
的语法是很严格的,所以需要你仔细检查
makefile
中的内容哪里有写得不规范的地方。 参考技术A make
menuconfig的rule是放在linux根目录下的。也就是解压linux之后那个文件夹下,一定要回到这个目录里才可以make
menuconfig成功,我用的是天嵌tq2440,,我将linux解压到root@embedsky:/opt/embedsky/linux-2.6.30.4,我到linux-2.6.30.4这个目录里去make
menuconfig,然后就ok了。
以上是关于Linux下的socket是怎么回事,如何利用其实现局域网内的数据处理?的主要内容,如果未能解决你的问题,请参考以下文章
socket通信客户端发送的数据,服务器端只能收到空格后面的数据,这是怎么回事??
arm开发板上的linux如何通过网口和windows的网口通信,linux中的socket和windows下的socket能通用吗?