您的位置:首页 > 运维架构 > Linux

Linux Socket编程简单实例

2010-12-23 22:16 495 查看
 

#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<netdb.h>

char *host_name="127.0.0.1";
int port=7778;

struct student
{
char name[20];
char num[20];
float score;
}t={"xiejian","200701415",89.9};

int main ( )
{
char buf[502];
int socket_descriptor;
struct sockaddr_in pin;
bzero(&pin,sizeof(pin));
pin.sin_family=AF_INET;
inet_pton(AF_INET,host_name,&pin.sin_addr);
pin.sin_port=htons(port);
if((socket_descriptor=socket(AF_INET,SOCK_STREAM,0))==-1)
{
perror("Error openung socket!/n");
exit(1);
}
if(connect(socket_descriptor,(void *)&pin,sizeof (pin))==-1)
{
perror("can not connecting to server!/n");
exit (1);
}
printf("Send message  to server .../n");
//memset(buf,0,502);
//memcpy(buf,(void *)&t,sizeof(t));
//sprintf(buf,"%s %d",t.name,t.num);
//printf("the first string : %s/n",buf);
if(send(socket_descriptor,(void *) &t,sizeof(t),0)==-1)
{
perror("can not send message!/n");
exit (1);
}
printf("waiting for response from server!/n");
memset(buf,0,502);
if(recv(socket_descriptor,buf,sizeof(buf),0)==-1)
{
perror("can not receive response !/n");
exit (1);
}
printf("/n Response from server : /n");
memcpy((struct student *)&t,buf,sizeof(buf));
//printf("the string : %s /n",rebuf);
printf("--%s--%s--%5.1f--/n",t.name,t.num,t.score);
close (socket_descriptor);
}


/* 注意在send 结构体时应该把结构体强制类型转换为void * 型
** 接受之后又要强制转换回结构体型!否则则穿过来的是结构体的
** 一部分!
*/

下面是服务端
#include<stdio.h>
#include<stdlib.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<netdb.h>

int port=7778;
struct student
{
char name[20];
char num[20];
float score;
}t;

main()
{
struct sockaddr_in sin;
struct sockaddr_in pin;
int sock_descriptor;
int temp_sock_descriptor;
int size_of_addr;
//struct cfg a;
char buf[502];
int i,lenth;
sock_descriptor=socket(AF_INET,SOCK_STREAM,0);
if(sock_descriptor==-1)
{
perror("socket!/n");
exit(1);
}
bzero(&sin,sizeof(sin));
sin.sin_addr.s_addr=INADDR_ANY;
sin.sin_port=htons(port);
if(bind(sock_descriptor,(struct sockaddr *)&sin,sizeof (sin))==-1)
{
perror("bind!/n");
exit(1);
}
if(listen (sock_descriptor,20)==-1)
{
perror("listen!/n");
exit(1);
}
printf("Waiting for accepting connection from client!/n");
while(1)
{
printf("the process is waiting here!/n");
temp_sock_descriptor=accept(sock_descriptor, (struct sockaddr *)&pin,&size_of_addr);
if(temp_sock_descriptor==-1)
{
perror("call to accept!/n");
exit (1);
}
memset(buf,0,502);
if(recv(temp_sock_descriptor,buf,sizeof(buf),0)==-1)
{
perror("recv!/n");
exit (1);
}

printf("received : /n");
//printf("the recv buf is :%s/n",buf);
memcpy((struct student *) &t,buf,sizeof(buf));
printf("--%s--%s--%5.1f--/n",t.name,t.num,t.score);
if(send (temp_sock_descriptor,(void *) &t,sizeof(t),0)==-1)
{
perror("send!/n");
exit(1);
}
close (temp_sock_descriptor);
}
}

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息