#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc,char* argv)
{
int server_sockfd,client_sockfd
int server_len,client_len
struct sockaddr_in server_address
struct sockaddr_in client_address
//获得一个socket文件描述符,使用tcp ip 协议
server_sockfd=socket(AF_INET,SOCK_STREAM,0)
server_address.sin_family=AF_INET
server_address.sin_addr.s_addr=htonl(INADDR_ANY)
//使用端口9734 来接受请求
server_address.sin_port=htons(9734)
server_len=sizeof(server_address)
//绑定socket
bind(server_sockfd,(struct sockaddr *)&server_address,server_len)
//监听连接请求,连接请求队列 大小为 5
listen(server_sockfd,5)
while(1)
{
char ch
printf("server waiting\n")
client_len=sizeof(client_address)
//接受client 端的连接请求,如果没有连接请求,该进程将阻塞
client_sockfd=accept(server_sockfd,(struct sockaddr *)&client_address,&client_len)
//读数据
read(client_sockfd,&ch,1)
ch++
//写数据
write(client_sockfd,&ch,1)
//关闭与client端的连接
close(client_sockfd)
}
}
客户端
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
int main(int argc,char* argv)
{
int sockfd
int len
struct sockaddr_in address
int result
char ch='A'
//设置需要连接服务器的 ip port
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=htons(9734)
len=sizeof(address)
//连接服务器
result=connect(sockfd,(struct sockaddr *)&address,len)
if(result==-1)
{
perror("oops:client3")
exit(1)
}
//写数据
write(sockfd,&ch,1)
//读数据
read(sockfd,&ch,1)
printf("char from server=%c\n",ch)
//关闭与服务器的连接
close(sockfd)
exit(0)
}
关于你的问题:
1.简单的方法,设置socket套接字为非阻塞模式,然后轮询,并查看是否超时。
或者是使用select poll 等方法 ,设置超时时间。
或者 使用 alarm 信号,都可以。
2..每当接收到一个client 端的连接请求,就开辟一个线程为之服务。
或者使用select poll epoll等方法,推荐这个。
3.你是指的是处理信号吗?这个有专门的函数 signal 可以处理。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)