服务器客户端通信问题

caiyuanyuan 2004-09-12 07:09:26
想用Linux做服务器,Windows为客户端实现通信问题,照着书上写了服务器端的程序,出现问题,请高手帮忙解决一下。
...全文
239 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
caiyuanyuan 2004-09-24
  • 打赏
  • 举报
回复
好像不能在一台Linux操作系统中同时运行服务器客户端程序呀,我以前用VB编程可以在机子里面同时运行的
caiyuanyuan 2004-09-24
  • 打赏
  • 举报
回复
也谢谢阿鱼木木:)
caiyuanyuan 2004-09-24
  • 打赏
  • 举报
回复
太好了,谢谢fengge8ylf
winux0 2004-09-17
  • 打赏
  • 举报
回复
客户端:
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

char *msg = "HELLO";

int main()
{
int sockfd;
struct sockaddr_in dest_addr;

char buff[20];

sockfd = socket( AF_INET, SOCK_STREAM, 0 );
dest_addr.sin_family = AF_INET;
dest_addr.sin_port = htons( 5050 );
dest_addr.sin_addr.s_addr = inet_addr( "192.168.8.201" );

connect( sockfd, (struct sockaddr*)&dest_addr, sizeof(struct sockaddr));
send( sockfd, msg, strlen(msg), 0 );
recv( sockfd, buff, 20, 0 );
printf( "%s\n",buff );
close( sockfd );
return 0;
}
服务器端:
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

int main()
{
int sockfd, newfd;
char buff[20];
struct sockaddr_in my_addr;
struct sockaddr_in other_addr;
int sin_size;
sockfd = socket( AF_INET, SOCK_STREAM, 0);
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons( 5050 );
my_addr.sin_addr.s_addr = INADDR_ANY;
bzero(&(my_addr.sin_zero), 8);
bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr));
listen(sockfd, 1);
// sin_size = sizeof(struct sockaddr_in);
printf( "1\n" );
newfd = accept( sockfd, &other_addr, &sin_size );
printf( "2\n" );
printf( "%s:%d CONNECTED\n", inet_ntoa(other_addr.sin_addr), ntohs(other_addr.sin_port) );
recv( newfd, buff, 20, 0 );
printf( "%s\n",buff );
memset( buff, 0 , 20 );
strcpy( buff, inet_ntoa(other_addr.sin_addr) );
send( newfd, buff, strlen(inet_ntoa(other_addr.sin_addr)),0 );
close( sockfd) ;
}
fengge8ylf 2004-09-17
  • 打赏
  • 举报
回复
想要的话 我发给你一个 不过下个礼拜才能给你
starstargao 2004-09-16
  • 打赏
  • 举报
回复
你看一下TCP/IP高级编程,看不懂来问
caiyuanyuan 2004-09-15
  • 打赏
  • 举报
回复
那是书上写错了,我发现好多书上的程序都有低级错误
哪位大侠有Linux服务器和Windows客户端通信的程序呀?
starstargao 2004-09-14
  • 打赏
  • 举报
回复
小妹妹,你写程序太不仔细了,
sprintf()写错
还有你封装write_all和read_all的在那里
starstargao 2004-09-14
  • 打赏
  • 举报
回复
这种错误一般都是你联接头文件出错,你应该仔细检查一下头文件包含的路径,和你自己的程序,和头文件没有关系
caiyuanyuan 2004-09-13
  • 打赏
  • 举报
回复
自己顶
caiyuanyuan 2004-09-13
  • 打赏
  • 举报
回复
up
caiyuanyuan 2004-09-13
  • 打赏
  • 举报
回复
但是给的是头文件错误呀,难道要一个个修改头文件呀?
icewolf_li 2004-09-13
  • 打赏
  • 举报
回复
全是语法错误。编译器已经把错误定位的很清楚拉,自己一个个照着去检查不就得了。
caiyuanyuan 2004-09-12
  • 打赏
  • 举报
回复
楼上的给一点提示呀!
city_goal 2004-09-12
  • 打赏
  • 举报
回复
哦,好多简单的错误哦。。。。。。
慢慢来,会提高效率的。。
caiyuanyuan 2004-09-12
  • 打赏
  • 举报
回复
编译gcc -Wall -o ss ss.c出现问题如下:
ss.c:1: parse error before "buffer"
ss.c:1:36: missing terminating ' character
ss.c:1:36: warning: character constant too long
ss.c:2: parse error before "you"
ss.c:2: warning: type defaults to `int' in declaration of `file'
ss.c:2: warning: type defaults to `int' in declaration of `first'
ss.c:2: parse error before "visit"
ss.c:3: parse error before "enter"
ss.c:3:36: missing terminating ' character
ss.c:3:36: warning: character constant too long
In file included from ss.c:5:
/usr/include/string.h:39: parse error before "size_t"
/usr/include/string.h:42: parse error before "size_t"
/usr/include/string.h:51: parse error before "size_t"
/usr/include/string.h:58: parse error before "size_t"
/usr/include/string.h:61: parse error before "size_t"
/usr/include/string.h:65: parse error before "size_t"
/usr/include/string.h:86: parse error before "size_t"
/usr/include/string.h:93: parse error before "size_t"
/usr/include/string.h:99: parse error before "size_t"
/usr/include/string.h:106: parse error before "strxfrm"
/usr/include/string.h:107: parse error before "size_t"
/usr/include/string.h:176: parse error before "strcspn"
/usr/include/string.h:180: parse error before "strspn"
/usr/include/string.h:230: parse error before "strlen"
/usr/include/string.h:248: parse error before "size_t"
/usr/include/string.h:253: parse error before "size_t"
/usr/include/string.h:257: parse error before "size_t"
/usr/include/string.h:260: parse error before "size_t"
/usr/include/string.h:263: parse error before "size_t"
/usr/include/string.h:291: parse error before "size_t"
In file included from /usr/include/sys/types.h:266,
from ss.c:6:
/usr/include/bits/pthreadtypes.h:48: parse error before "size_t"
/usr/include/bits/pthreadtypes.h:51: parse error before "__stacksize"
In file included from /usr/include/sys/uio.h:29,
from /usr/include/sys/socket.h:27,
from ss.c:7:
/usr/include/bits/uio.h:45: parse error before "size_t"
In file included from /usr/include/sys/socket.h:35,
from ss.c:7:
/usr/include/bits/socket.h:221: parse error before "size_t"
/usr/include/bits/socket.h:224: parse error before "msg_controllen"
/usr/include/bits/socket.h:227: parse error before '}' token
/usr/include/bits/socket.h:232: parse error before "size_t"
/usr/include/bits/socket.h:239: parse error before '}' token
In file included from ss.c:7:
/usr/include/sys/socket.h:131: parse error before "size_t"
/usr/include/sys/socket.h:136: parse error before "size_t"
/usr/include/sys/socket.h:141: parse error before "size_t"
/usr/include/sys/socket.h:149: parse error before "size_t"
In file included from /usr/include/_G_config.h:44,
from /usr/include/libio.h:32,
from /usr/include/stdio.h:72,
from ss.c:9:
/usr/include/gconv.h:72: parse error before "size_t"
/usr/include/gconv.h:88: parse error before "size_t"
/usr/include/gconv.h:97: parse error before "size_t"
/usr/include/gconv.h:174: parse error before "size_t"
/usr/include/gconv.h:177: parse error before '}' token
In file included from /usr/include/libio.h:32,
from /usr/include/stdio.h:72,
from ss.c:9:
/usr/include/_G_config.h:47: field `__cd' has incomplete type
/usr/include/_G_config.h:50: field `__cd' has incomplete type
/usr/include/_G_config.h:52: confused by earlier errors, bailing out

caiyuanyuan 2004-09-12
  • 打赏
  • 举报
回复
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
#include <signal.h>
#include <errno.h>
#include <unistd.h>
#include <netdb.h>

#define MAX_BUF_SIZE 1024
#define SERVER_PORT 8080
#define BACKLOG 5
int main(int argc,char *argv[])
{
int listenfd,connfd;
struct sockaddr_in servaddr;
listenfd=socket(AF_INET,SOCK_STREAM,0); //use the function socket to create a socket
if (listenfd<0) {
fprintf(stderr,"Socket error\n");
exit(1);
}
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr= htonl(INADDR_ANY); //the server's ip is INADDR_ANY,that is it can accept the request of client
//from any net device.
servaddr.sin_port=htons(SERVER_PORT);
if (bind(listenfd,(struct sockaddr *)&servaddr,sizeof(servaddr))<0) {
fprintf(stderr,"Bind error\n");
exit(1);
}
if (listen(listenfd,BACKLOG)<0) { //BACKLOG is the biggest unaccepted number which client request.
fprintf(stderr,"Listen error\n");
exit(1);
}
for (;;) {
connfd=accept(listenfd,NULL,NULL);
if (connfd<0) {
fprintf(stderr,"Accept error\n");
exit(1);
}
serv_respon(connfd);
close(connfd);
}
close(listenfd);
}

void serv_respon(int sockfd)
{
int nbytes;
char buf[1024];
for (;;) {
nbytes=read_requ(sockfd,buf,1024);
if (nbytes==0)
return ;
else if(nbytes<0) {
fprintf(stderr,"read error: %s\n",strerror(errno));
return ;
}
if (write_all(sockfd,buf,nbytes)<0)
fprintf(stderr,"write error:%s\n",strerror(errno));
}
}
int read_requ(int sockfd,char *buf,int size)
{
char inbuf[256];
int n;
int i;
i=read_line(sockfd,inbuf,256);
if(i<0)
return(i);
else if(i==0)
return(0); //the customer has closed the connect
if(strncmp(inbuf,"Length",6)==0)
sscanf(buf+6,"%d",&n);
else {
spintf(buf,"Invalid option",14);
return(14);
}
return(read_all(sockfd,buf,n));
}



int get_char(int fd,char *ch)
{
static int offset=0;
static int size=0;
static char buf[MAX_BUF_SIZE];
for (;size<=0||offset==size;){
size=read(fd,buf,MAX_BUF_SIZE);
if(size<0)
{
if(errno==EINTR)
{
size=0;
continue;
}
else
return(-1);
}
offset=0;
}
*ch=buf[offset++];
return(1);
}

int read_line(int fd,char*buf,int maxlen)
{
int i,n;
char ch;
for(i=0;i<maxlen;) {
n=get_char(fd,&ch);
if(n==1) {
buf[i++]=ch;
if(ch=='\n')
break;
} else if(n<0)
return(-1);
else
break;
}
buf[i]='\0';
return(i);
}

没有发现书上给的write-all()

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧