请Winsoket高手进来帮Me看看socket通信问题
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/times.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define STDIN 0
#define STDOUT 1
#define STDERR 2
#define PORT 1119
#define BUFFER_SIZE 1024
int main()
{
int socket_des;
int address_len;
int real_len;
int real_send_len;
int real_receive_len;
char sendstr[]="Welcome to me!\n";
char server_input[BUFFER_SIZE];
char client_message[BUFFER_SIZE];
struct timeval tv;
struct sockaddr_in address;
fd_set readfds;
tv.tv_sec =20;
tv.tv_usec =500000;//请问这是什么意识
socket_des =socket(AF_INET,SOCK_STREAM,0);
address.sin_family =AF_INET;
address.sin_addr.s_addr =htonl(INADDR_ANY);
address.sin_port =htons(PORT);
bzero(address.sin_zero,8);//请问这是什么意识
address_len =sizeof(address);//请问这是什么意识
bind(socket_des, (struct sockaddr *)&address,address_len);
listen(socket,5);
system("clear");
while(1)
{
int len;
pid_t pid;
int client_sock_des;
struct sockaddr_in client_address;
len =sizeof(client_address);
client_sock_des =accept(socket_des,(struct sockaddr *)&client_address, &len);
if((pid=fork())==0)//请问这是什么意识
{
close(socket_des);
printf("111 Get connection from client %s\n",inet_ntoa(client_address.sin_addr));为什么这行老是执行啊
// char sendstr[]="Welcome connect to me\n";
real_send_len =send(client_sock_des,sendstr,strlen(sendstr),0);
while(1)
{
FD_ZERO(&readfds);
FD_SET(STDIN,&readfds);
select(client_sock_des+1,&readfds,NULL,NULL,&tv);
if(FD_ISSET(STDIN,&readfds))
{// Send to Server
real_len = read(STDIN,server_input,sizeof(server_input));
server_input[real_len]='\0';
real_send_len = send(client_sock_des,server_input,real_len,0);
// need some process here
printf("Send to Client::%s",server_input);
}
else if(FD_ISSET(client_sock_des,&readfds))
{// receive and send to output
real_receive_len = recv(client_sock_des,client_message,BUFFER_SIZE,0);
if(real_receive_len==0)
{
exit(0);
}
else
{
client_message[real_receive_len]='\0';
printf(" Frome client ::%s",client_message);
}
}
else
{
close(client_sock_des);
printf("time out\n");
exit(1);
}
}//in Wend
close(client_sock_des);
exit(0);
}// End if
close(client_sock_des);
}// Wend
exit(0);
return 0;
}
请问我怎么用VB/VC/C++在Windows2k下进行通信
问题点数:50、回复次数:6Top
1 楼yhcustc(互学)回复于 2005-01-29 20:09:38 得分 0
我上边代码有问题,不果也是抄别人,我想在Linux下写个Server和windows下进行socket通信。
不好意识块过年还麻烦大家,先谢了!Top
2 楼yoke_wolf(漠中草)回复于 2005-01-29 20:41:00 得分 0
建议先看书。。。
看不懂或实在搞不定再问Top
3 楼pirkka(夜深)回复于 2005-01-29 20:42:29 得分 0
bzero(address.sin_zero,8);//请问这是什么意识---将struct sockaddr_in中的sin_addr[8]清零,保持和sockaddr长度相同
address_len=sizeof(address);//请问这是什么意识
得到结构的大小,在下一行
bind(socket_des, (struct sockaddr *)&address,address_len);
就用到了。
if((pid=fork())==0)//请问这是什么意识
创建新的进程来处理当前请求的连接,之前的那个进程还负责监听。==0表示在子进程中了。
printf("111 Get connection from client %s\n",inet_ntoa(client_address.sin_addr));为什么这行老是执行啊---while(1)不停的循环,只要有客户端连接上来,就会执行这句话。。。。Top
4 楼yhcustc(互学)回复于 2005-01-30 13:26:16 得分 0
问题时,我还没有客户端连接他 就执行了
if((pid=fork())==0)//请问这是什么意识
创建新的进程来处理当前请求的连接,之前的那个进程还负责监听。==0表示在子进程中了。
printf("111 Get connection from client %s\n",inet_ntoa(client_address.sin_addr));Top
5 楼yjf7888(seeking a place 找工作了location:Chengdu)回复于 2005-01-31 21:34:36 得分 0
tv.tv_sec =20;
tv.tv_usec=500000;
------------------------------
select()的超时长度,tv_sec的单位是秒,tv_usec是微秒Top
6 楼gaoxianfeng(高)回复于 2005-02-01 11:55:50 得分 50
int main()
{
int socket_des;
int address_len;
int real_len;
int real_send_len;
int real_receive_len;
char sendstr[]="Welcome to me!\n";
char server_input[BUFFER_SIZE];
char client_message[BUFFER_SIZE];
struct timeval tv;
struct sockaddr_in address;
fd_set readfds;
tv.tv_sec =20;
tv.tv_usec =500000;//请问这是什么意识 500000微秒 即0.5秒
socket_des =socket(AF_INET,SOCK_STREAM,0);
address.sin_family =AF_INET;
address.sin_addr.s_addr =htonl(INADDR_ANY);
address.sin_port =htons(PORT);
bzero(address.sin_zero,8);//请问这是什么意识 清零 从address.sin_zero开始8字节
address_len =sizeof(address);//请问这是什么意识 取address结构大小
bind(socket_des, (struct sockaddr *)&address,address_len);
listen(socket,5);
system("clear");
while(1)
{
int len;
pid_t pid;
int client_sock_des;
struct sockaddr_in client_address;
len =sizeof(client_address);
client_sock_des =accept(socket_des,(struct sockaddr *)&client_address, &len);
if((pid=fork())==0)//请问这是什么意识 fork 创建进程 ==0 子进程
{
close(socket_des);
printf("111 Get connection from client %s\n",inet_ntoa(client_address.sin_addr));为什么这行老是执行啊 主进程一直未退出 while(1)
// char sendstr[]="Welcome connect to me\n";
real_send_len =send(client_sock_des,sendstr,strlen(sendstr),0);
while(1)
{
FD_ZERO(&readfds);
FD_SET(STDIN,&readfds);
select(client_sock_des+1,&readfds,NULL,NULL,&tv);
if(FD_ISSET(STDIN,&readfds))
{// Send to Server
real_len = read(STDIN,server_input,sizeof(server_input));
server_input[real_len]='\0';
real_send_len = send(client_sock_des,server_input,real_len,0);
// need some process here
printf("Send to Client::%s",server_input);
}
else if(FD_ISSET(client_sock_des,&readfds))
{// receive and send to output
real_receive_len = recv(client_sock_des,client_message,BUFFER_SIZE,0);
if(real_receive_len==0)
{
exit(0);
}
else
{
client_message[real_receive_len]='\0';
printf(" Frome client ::%s",client_message);
}
}
else
{
close(client_sock_des);
printf("time out\n");
exit(1);
}
}//in Wend
close(client_sock_des);
exit(0);
}// End if
close(client_sock_des);
}// Wend
exit(0);
return 0;
}
还要多学习Top




