linux中套接字编程语句和windows下的差不多
1、服务器端
/*
============================================================================
Name : Test.c
Author : wangchuan
Version :
Copyright : Your copyright notice
Description : Hello World in C, Ansi-style
============================================================================
*/
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
int main()
{
int server_sockfd,client_sockfd;
int server_len,client_len;
struct sockaddr_in server_address;
struct sockaddr_in client_address;
server_sockfd=socket(AF_INET,SOCK_STREAM,0);
server_address.sin_family=AF_INET;
server_address.sin_addr.s_addr=inet_addr("127.0.0.1");
server_address.sin_port=9734;
server_len=sizeof(server_address);
bind(server_sockfd,(struct sockaddr *)&server_address,server_len);
listen(server_sockfd,5);
while(1){
char ch;
printf("服务器等待消息\n");
client_sockfd=accept(server_sockfd,
(struct sockaddr *)&client_address,
(socklen_t *__restrict)&client_len);
read(client_sockfd,&ch,1);
ch++;
write(client_sockfd,&ch,1);
close(client_sockfd);
}
return 0;
}
2、客户端
/*
============================================================================
Name : exec.c
Author : wangchuan
Version :
Copyright : Your copyright notice
Description : Hello World in C, Ansi-style
============================================================================
*/
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
int main(void) {
int sockfd;
int len;
struct sockaddr_in address;
int result;
char ch='A';
sockfd=socket(AF_INET,SOCK_STREAM,0);
address.sin_family=AF_INET;
address.sin_addr.s_addr=inet_addr("127.0.0.1");
address.sin_port=9734;
len=sizeof(address);
result=connect(sockfd,(struct sockaddr *)&address,len);
if(result == -1){
perror("oops:client");
return 1;
}
write(sockfd,&ch,1);
read(sockfd,&ch,1);
printf("来自服务器的消息是%c\n",ch);
close(sockfd);
return 0;
}
3、如何查找主机名称
/*
============================================================================
Name : Test.c
Author : wangchuan
Version :
Copyright : Your copyright notice
Description : Hello World in C, Ansi-style
============================================================================
*/
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <netdb.h>
#include <unistd.h>
int main(int argc,char *argv[])
{
char *host;
int sockfd;
int len,result;
struct sockaddr_in address;
struct hostent *hostinfo;
struct servent *servinfo;
char buffer[128];
if(argc == 1)
host = "localhost";
else host=argv[1];
hostinfo = gethostbyname(host);
if(!hostinfo){
fprintf(stderr,"找不到主机:%s\n",host);
return 1;
}
servinfo = getservbyname("daytime","tcp");
if(!servinfo){
fprintf(stderr,"no daytime service\n");
return 1;
}
printf("daytime服务器端口是:%d\n",ntohs(servinfo->s_port));
sockfd = socket(AF_INET,SOCK_STREAM,0);
address.sin_family=AF_INET;
address.sin_port=servinfo->s_port;
address.sin_addr=*(struct in_addr *)*hostinfo->h_addr_list;
len=sizeof(address);
result=connect(sockfd,(struct sockaddr *)&address,len);
if(result == -1){
perror("获得数据出错");
return 1;
}
result = read(sockfd,buffer,sizeof(buffer));
buffer[result]='\0';
printf("读取%d字节:%s",result,buffer);
close(sockfd);
return 0;
}