转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 数据库 >> MySql >> 正文
利用socket编写windows和linux通讯程序         ★★★★

利用socket编写windows和linux通讯程序

作者:闵涛 文章来源:闵涛的学习笔记 点击数:658 更新时间:2009/4/22 20:46:09

    socket编程大家都很熟悉,我在这里就不再罗嗦了。直接切入正题。
该程序分两部分,server端和client端(谁都知道)。其中server端采用windows平台,那linux平台当然是client端了。
这里是server端程序:
/**********************************/
/* it worked as server under windows platform */
/* written by mlsx 1998-2-7                     */
/************************************/

include <windows.h>
#include <stdio.h>
#pragma comment (lib,"WS2_32.lib")
#define USERPORT 10001
#define HOST_IP_ADDR "127.0.0.1"

main(int argc,char *argv[])
{
 char buf[128];
 SOCKET s,ns;
 struct sockaddr_in client;
 struct sockaddr_in server;
 int namelen,pklen;
 int status;
 WSADATA wsd;
 if((status=WSAStartup(MAKEWORD(2,2),&wsd))!=0)
 {
  perror("wsastartup() failed:");
   exit(1);
 }
 if((s=socket(AF_INET,SOCK_STREAM,0))< 0)
 {
  perror("socket failed :");
  exit(1);
 }
 ZeroMemory(&server,sizeof(server));
 server.sin_family=AF_INET;
 server.sin_port=htons(USERPORT);
 server.sin_addr.s_addr=htons(INADDR_ANY);
 if(bind(s,(struct sockaddr *)&server,sizeof(server))<0)
 {
  perror("bind() failed:");
  exit(2);
 }
 if(listen(s,4)!=0)
 {
  perror("listen()failed :");
  exit(3);
 }
 while(1)
 {
 namelen=sizeof(client);
 if((ns=accept(s,(struct sockaddr*)&client,&namelen))==-1)
 {
  perror("accept()failed:");
  exit(4);
 }
 printf("accept successful");
 for(;;)
 {
  if((pklen=recv(ns,buf,128,0))<0)
  {
   perror("recv() failed:");
   exit(5);
  }
  else
   if(pklen==0)
   {
    printf("recv():return FAILED,connected is shut down");
    break;
   }
   else
    printf("recv():return success,packet length=%d context is %s\n",pklen,buf);
  
  Sleep(1);
  //printf("the buf is %s\n",buf);
  if(send(ns,buf,128,0)<0)
  {
   perror("send() failed:");
   break;
  }
  else
   printf("send() return success packet length is %d\n",pklen);
 }
 }
 closesocket(ns);
 closesocket(s);
 printf("server ended successfully\n");
}

 

这里是client端程序:

/**********************************/
/* it worked as client under linux platform */
/* written by mlsx 1998-2-7                     */
/************************************/
#include <windows.h>
//#include <winsock2.h>
#include <stdio.h>
#pragma comment (lib,"WS2_32.lib")
#define USERPORT 5003
main(int argc,char *argv[])
{
 char buf[128];
 SOCKET sclient;
 struct sockaddr_in server;
 int namelen,pklen;
 int status,ret;
 char szmessage[128];
 WSADATA wsd;
 if(argc<2)
 {
  printf("usage:\n");
  printf("%s ipaddr",__FILE__);
  printf("ipaddr is the server''''s ip address,like xxx.xxx.xxx.xxx\n");
  exit(1);
 }
 if((status=WSAStartup(MAKEWORD(2,2),&wsd))!=0)
 {
  perror("wsastartup() failed:");
   exit(1);
 }
 if((sclient=socket(AF_INET,SOCK_STREAM,0))< 0)
 {
  perror("socket failed :");
  exit(1);
 }
 ZeroMemory(&server,sizeof(server));
 ZeroMemory(szmessage,sizeof(szmessage));
 server.sin_family=AF_INET;
 server.sin_port=htons(USERPORT);
 server.sin_addr.s_addr=inet_addr(argv[1]);
 if(connect(sclient,(struct sockaddr *)&server,sizeof(server))<0)
 {
  perror("connect() failed :");
  printf("%d",WSAGetLastError());
  exit(3);
 }
 namelen=sizeof(sclient);
 
 /*for(ret=0;ret<10;ret++)
 {
  
  if(send(sclient,szmessage,sizeof(szmessage),0)<0)
  {
   perror("send() failed:");
   break;
  }
 
  printf("send() return success\n  context is %s \n",szmessage);
  if((pklen=recv(sclient,buf,sizeof(buf),0))<0)
  {
   perror("recv() failed:");
   exit(5);
  }
  else
   if(pklen==0)
   {
    printf("recv():return FAILED,connected is shut down");
    break;
   }
   else
   {
    printf("the pktlen is %d\n",pklen);
    buf[pklen]=''''\0'''';
    printf("recv():return success\npacket length=%d and the context is %s\n",pklen,buf);
    ZeroMemory(buf,sizeof(buf));
   }
   Sleep(10);
 }*/
 //while(strcmp(szmessage,"q"))
 while(1)
 {
  
  ZeroMemory(szmessage,sizeof(szmessage));
  //scanf("%s",szmessage);
  //puts(szmessage);
  //gets(szmessage);
  //send(sclient,szmessage,sizeof(szmessage),0);
  //Sleep(10);
  ZeroMemory(buf,sizeof(buf));
  ret=recv(sclient,buf,sizeof(buf),0);
  buf[ret]=''''\0'''';
  //printf("%s the length is %d ",buf,ret);
  puts(buf);
  Sleep(1);
  
 }
 
  
 closesocket(sclient);
 WSACleanup();
 printf("server ended successfully\n");
 return 0;
}


[C语言系列]C# 和 Linux 时间戳转换  [Web开发]PHP flock文件锁介绍
[Web开发]flock() Linux下的文件锁  [电脑应用]Linux下的六个免费的虚拟主机管理系统介绍
[系统软件]windows下Apache+php+mysql的安装与配置图解  [电脑应用]Linux数据库大比拚
[操作系统]在Windows中玩转Linux操作系统  [操作系统]死马还当活马医:6种方法挽救Windows系统
[办公软件]在RedHat Linux 9里安装gaim0.80  [办公软件]掌握 Linux 调试技术
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Sql Server  · MySql
    · Access  · ORACLE
    · SyBase  · 其他
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台