Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 软件时空 > 软件相关 > Socket程序设计
【标  题】:Socket程序设计
【关键字】:Socket
【来  源】:http://blog.chinaunix.net/article.php?articleId=23186&blogId=6424

Socket程序设计

Your Ad Here 一直没有把Socket程序的Server端写顺利,今天总算比较顺利的完成了,但是里面对于通讯的超时等没有做控制,在这里仅列出框架,权当抛砖引玉吧

server端程序:

#include <stdio.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <netdb.h>
#include <netinet/in.h>
#include <fcntl.h>

#define SOCKPORT 0x1234
#define MAXBUFLEN 255

int main( int argc, char **argv )
{
 int  iLength;
 struct sockaddr_in bind_in;
 struct sockaddr_in accept_in;
 int  iSocket, iAcceptSocket;
 char szBuffer[ MAXBUFLEN + 1 ];
 char szBufTemp[ 10 + 1 ];

 iSocket = socket( AF_INET, SOCK_STREAM, 0 );
 if ( iSocket < 0 )
 {
  perror( "socket( AF_INET, SOCK_STREAM, 0 )" );
  exit( -1 );
 }

 bzero( bind_in, sizeof(bind_in) );
 bind_in.sin_family = AF_INET;
 bind_in.sin_addr.s_addr = INADDR_ANY;
 bind_in.sin_port = htons( SOCKPORT );

 iLength = sizeof( bind_in );
 if ( bind(iSocket, (struct sockaddr*)&bind_in, iLength) < 0 )
 {
  perror( "bind socket!" );
  exit( -1 );
 }

 if ( listen(iSocket, 5) < 0 )
 {
  perror( "listen socket!" );
  exit( -1 );
 }

 for ( ; ; )
 {
  iAcceptSocket = accept( iSocket,
     (struct sockaddr*)&accept_in, (int *)&iLength );
  if ( iAcceptSocket == -1 )
  {
   continue;
  }

  if ( fork() > 0 )
  {
   close( iAcceptSocket );
   continue;
  }

  printf( "the child pid = [%d]\n", getpid() );
  memset( szBuffer, 0x0, sizeof(szBuffer) );
  do
  {
   memset( szBufTemp, 0x0, sizeof(szBufTemp) );
   iLength = read( iAcceptSocket, szBufTemp, 10 );
   strncat( szBuffer, szBufTemp, iLength );
  }while ( iLength == 10 );

  strcat( szBuffer, "\nread completed!" );
  write( iAcceptSocket, szBuffer, sizeof(szBuffer) );

  close( iAcceptSocket );
  close( iSocket );
  exit( 0 );
 } /* end of for */
}

Client端程序:

#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>

#define SERVPORT 0x1234
#define MAXBUFLEN 255

int main( int argc, char ** argv )
{
 struct sockaddr_in connect_in;
 int iLength;
 int iSocket;
 char szHostAddress[] = "192.1.1.111";
 char szBuffer[ MAXBUFLEN + 1 ];
 char szBufTemp[ 10 + 1 ];

 bzero( &connect_in, sizeof(connect_in) );
 connect_in.sin_family = AF_INET;
 connect_in.sin_addr.s_addr = inet_addr( szHostAddress );
 connect_in.sin_port = htons( SERVPORT );

 if ( (iSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0 )
 {
  perror( "socket SOCK_STREAM, IPPROTO_TCP error!" );
  exit( -1 );
 }

 if ( connect(iSocket, (struct sockaddr*)&connect_in,
       sizeof(connect_in)) < 0 )
 {
  perror( "connect error!" );
  exit( -1 );
 }

 memset( szBuffer, 0x0, sizeof(szBuffer) );
 strcpy( szBuffer, "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" );
 if ( write(iSocket, szBuffer, sizeof(szBuffer)) < 0 )
 {
  perror( "write to server error!" );
  close( iSocket );
  exit( -1 );
 }

 memset( szBuffer, 0x0, sizeof(szBuffer) );
 do
 {
  memset( szBufTemp, 0x0, sizeof(szBufTemp) );
  iLength = read( iSocket, szBufTemp, 10 );
  strncat( szBuffer, szBufTemp, iLength );
 }while ( iLength == 10 );
 printf( "The answer is : [%s]\n", szBuffer );

 close( iSocket );

 exit( 0 );
}

高效能人士的七个习惯:【上一篇】
学习和使用不懂的编程语言的好帮手-Zamples网站:【下一篇】
【相关文章】
  • 学习socket编程
  • 非常简单的socket服务器例子(原创)
  • Socket编程中select()的妙用(转载)
  • linux下用socket的抓包程序
  • 怎么取得和设置a socket的属主?
  • Elementary TCP socket
  • 用Perl语言进行Socket编程
  • socket编程指南
  • [Perl]转载-IO::Socket
  • Socket Programming in PERL
  • 【随机文章】
  • 使用Flash的XMLSocket与Servlet建立长连接(6,建立测试的jsp)
  • 基于.NET 2.0的GIS开源项目SharpMap分析手记(五):WebGIS原理分析及思考
  • 通信基础-3
  • 世界上第一个基于Cell Broadband Engine的超级计算机即将问世
  • 为了有显示歌词这个功能。。又刷回来了...
  • 新型光纤及其标准
  • PHP生成验证码图片
  • 如何正确统计中文字数
  • 在当前网络,针对windows主机的攻击层出不穷
  • 长沙本地宽带网络建设方案(4)
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.