SOS!!!!UNIX下的Socket Client/Server编程
只做过windows下的,请各位大虾帮帮我,最好给个简单例子 问题点数:58、回复次数:8Top
1 楼lurenfu(具有中国特色的社会主义初级阶段,一百年不变)回复于 2001-11-08 20:06:58 得分 0
我只做过linux下的,从没做过windows下的,linux下的socket我是半个专家咯,不信你看专家榜,当然只限这个月的,因为我这个月才开始咯Top
2 楼lurenfu(具有中国特色的社会主义初级阶段,一百年不变)回复于 2001-11-08 20:11:13 得分 0
有么事不明白之处尽管问,我不知道也可以帮你查资料。Top
3 楼lurenfu(具有中国特色的社会主义初级阶段,一百年不变)回复于 2001-11-08 20:35:36 得分 0
简单示例如下,这是最基本的形式,没有考虑通信方式(阻塞/非阻塞/信号/复用/异步),也没有考虑服务器的工作方式:单客户服务、多客户服务、多进程、多线程、select复用等
server.c
#include <stdio.h>
#include <assert.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#define LISTEN_PORT 8888
int main( int argc, char **argv )
{
int sock, result;
socklen_t len;
struct sockaddr_in addr;
sock = socket( PF_INET, SOCK_STREAM, IPPROTO_IP );
assert( sock != -1 );
bzero( &addr, sizeof(addr) );
addr.sin_family = AF_INET;
addr.sin_port = htons( LISTEN_PORT );
addr.sin_addr.s_addr = htonl( INADDR_ANY );
len = (socklen_t)sizeof(addr);
r = bind( sock, (struct sockaddr *)&addr, len );
assert( r != -1 );
r = listen( sock, 5 );
assert( r != -1 );
while ( 1 )
{
int newsock;
struct sockaddr_in cliaddr;
newsock = accept( sock, (struct sockaddr *)&addr, (socklen_t)sizeof(addr) );
assert( newsock != -1 );
if ( fork() == 0 )
{
close( sock );
send( newsock, GREETING, strlen(GREETING) );
close( newsock );
exit( 0 );
}
close( newsock );
}
return 0;
}Top
4 楼purplelover(狂飙)回复于 2001-11-08 20:46:53 得分 0
首先谢谢楼上的大哥
要求如下:(client和server程序)
1) Client与Server建立连接;
2) Server向Client发送"Hello"消息;
3) Client显示来自Server的"Hello"消息;
4) Client断开与Server的连接;
5) Client与Server应用程序自动退出。
Top
5 楼lurenfu(具有中国特色的社会主义初级阶段,一百年不变)回复于 2001-11-08 20:51:57 得分 58
上面加一行:#define GREETING "Hello, pretty! I miss you!"
下面是client.c
#include <stdio.h>
#include <netdb.h>
#include <assert.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#define SERVER_PORT 8888
#define SERVER_ADDR "127.0.0.1"
int main( int argc, char **argv )
{
int sock, result;
socklen_t len;
char buf[256];
struct sockaddr_in addr;
sock = socket( PF_INET, SOCK_STREAM, IPPROTO_IP );
assert( sock != -1 );
bzero( &addr, sizeof(addr) );
addr.sin_family = AF_INET;
addr.sin_port = htons( SERVER_PORT );
if ( inet_aton( SERVER_ADDR, &addr.sin_addr ) == 0 )
{
struct hostent *h = NULL;
h = gethostbyname( SERVER_ADDR );
assert( h != NULL );
memcpy( &addr.sin_addr.s_addr, h->h_addr, h->h_length );
}
len = (socklen_t)sizeof(addr);
r = connect( sock, (struct sockaddr *)&addr, len );
assert( r != -1 );
memset( buf, 0, sizeof(buf) );
recv( sock, buf, sizeof(buf), 0 );
close( sock );
printf( "%s\n", buf );
return 0;Top
6 楼lurenfu(具有中国特色的社会主义初级阶段,一百年不变)回复于 2001-11-08 20:53:30 得分 0
突然发现少了一个}Top
7 楼purplelover(狂飙)回复于 2001-11-08 20:55:58 得分 0
好哥们,给分。以后还要多多指教才是。Top
8 楼lurenfu(具有中国特色的社会主义初级阶段,一百年不变)回复于 2001-11-08 21:23:46 得分 0
没问题!只要我知道的,一定知无不言,言无不尽。
大家共同进步,共同学习。以上代码可是我一个字母一个字母敲上去的呀Top




