2014年(41)
分类: LINUX
2014-04-23 21:21:44
#include
#include
#include
#include
#include
#include
#include
#include
#include
int main()
{
int opt = 1;
socklen_t len = sizeof(len);
int sock_fd;
char send_buf[100] = "client send to server!";
char recv_buf[100] = "recv data from server!";
struct sockaddr_in my_addr;
struct sockaddr_in dest_addr;
if((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror("socket");
exit(1);
}
if(setsockopt(sock_fd, SOL_SOCKET, SO_REUSEADDR, &opt, len) == -1)
{
perror("setsockopt");
exit(1);
}
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(4000);
my_addr.sin_addr.s_addr = inet_addr("192.168.1.110");
bzero(&(my_addr.sin_zero), 8);
dest_addr.sin_family = AF_INET;
dest_addr.sin_port = htons(4000);
dest_addr.sin_addr.s_addr = inet_addr("192.168.1.109");
bzero(&(dest_addr.sin_zero), 8);
if(bind(sock_fd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1)
{
perror("bind");
exit(1);
}
while(1)
{ //connect 是不阻塞的
if(connect(sock_fd, (struct sockaddr *)&dest_addr, sizeof(struct sockaddr)) == -1)
{
perror("connect");
}
else
{
while(1)
{
//send 是不阻塞的
if(send(sock_fd, send_buf, 100, 0) == -1)
{
perror("send");
}
else
{
break;
}
}
}
break;
}
shutdown(sock_fd, 2);
return 0;
}
server:
#include
#include
#include
#include
#include
#include
#include
#include
#include
int main()
{
int new_fd;
int sock_fd;
int da_size;
int opt = 1;
socklen_t len = sizeof(opt);
char send_buf[100] = "client send to server!";
char recv_buf[100] = "recv data from server!";
struct sockaddr_in my_addr;
struct sockaddr_in dest_addr;
if((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror("socket");
exit(1);
}
//解决linux同一个端口号不能重复使用的问题
if(setsockopt(sock_fd, SOL_SOCKET, SO_REUSEADDR, &opt, len) == -1)
{
perror("setsockopt");
exit(1);
}
my_addr.sin_family = AF_INET;//设置本地的地址信息
my_addr.sin_port = htons(4000);
my_addr.sin_addr.s_addr = INADDR_ANY;
bzero(&(my_addr.sin_zero), 8);
dest_addr.sin_family = AF_INET;//设置远程机的地址信息
dest_addr.sin_port = htons(4000);
dest_addr.sin_addr.s_addr = inet_addr("192.168.1.110");
bzero(&(dest_addr.sin_zero), 8);
if(bind(sock_fd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1)//绑定本地端口
{
perror("bind");
exit(1);
}
while(1)
{
if(listen(sock_fd, 5) == -1)//监听端口
{
perror("listen");
}
else
{
printf("listen over...\n");
while(1)
{ //如果没有任务,会阻塞在这
if((new_fd = accept(sock_fd, (struct sockaddr *)&dest_addr, &da_size)) == -1)//从任务队列中接受任务
{
perror("accept");
}
else
{
printf("accept over....\n");
//while(1)
//{
if(recv(new_fd, recv_buf, 100, 0) == -1)//接收消息
{
perror("recv");
}
else
{
printf("recv over....\n");
printf("recv data:%s\n", recv_buf);
}
//}
}
}
}
break;
}
shutdown(sock_fd, 2);
return 0;
}