当前位置:  技术问答>linux和unix

Socket通信编程问题(急!)

    来源: 互联网  发布时间:2015-12-29

    本文导语:  1. 有一个服务端软件和一个客户端软件,互相通信,通信方式采用字符串。 2. 客户端获取服务端数据,分析数据,并显示相应数据。 这样的程序应该怎么去实现?应该采用怎样的流程呢? | 我不贴代...

1. 有一个服务端软件和一个客户端软件,互相通信,通信方式采用字符串。
2. 客户端获取服务端数据,分析数据,并显示相应数据。

这样的程序应该怎么去实现?应该采用怎样的流程呢?


|
我不贴代码了,你去我的blog上,那里有例子
http://blog.163.com

|
来源:本文出自:http://sunsland.top263.net 作者: (2001-10-23 07:00:00) 

 
概述
回射服务器:echo server 

7th 端口; /etc/inetd.conf 

1.客户从标准输入读一行文本,写到服务器上

2.服务器从网络输入读此行,并回射给客户

3.客户读此回射行并写到标准输出。


--------------------------------------------------------------------------------

几个读写有关的函数
fputs 和 fgets 标准库函数

//简单的输入和输出程序:

// mystr_client.c
#include "unp.h"
void main(void)
{
char sendline[MAXLINE],recevline[MAXLINE];
fgets(sendline, MAXLINE, stdin); //标准输入
memcpy(recevline, sendline, strlen(sendline));
fputs(recevline, stdout); //标准输出
}

//writen 和 readline字节流读写函数

ssize_t Writen(int filedes, const void *buff, size_t nbytes);
ssize_t Readline(int filedes, void *buff, size_t maxlen);


--------------------------------------------------------------------------------

TCP回射服务器程序
//main源程序:

#include "unp.h"

int
main(int argc, char **argv)
{
int listenfd, connfd;
pid_t childpid;
socklen_t clilen;
struct sockaddr_in cliaddr, servaddr;

listenfd = Socket(AF_INET, SOCK_STREAM, 0);//创建套接口

bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(SERV_PORT);//9877

Bind(listenfd, (SA *) &servaddr, sizeof(servaddr));//绑定端口

Listen(listenfd, LISTENQ);

for ( ; ; ) {
clilen = sizeof(cliaddr);
connfd = Accept(listenfd, (SA *) &cliaddr, &clilen);//等待客户完成连接accept

if ( (childpid = Fork()) == 0) { /* child process */
Close(listenfd); /* close listening socket */
str_echo(connfd); /* process the request */
exit(0);
}
Close(connfd); /* parent closes connected socket */
}
}



//服务器程序str_echo 函数

//读如一行 Readline

//回射此行 Writen

#include "unp.h"
#include "sum.h"

void
str_echo(int sockfd)
{
ssize_t n;
struct args args;
struct result result;

for ( ; ; ) {
if ( (n = Readn(sockfd, &args, sizeof(args))) == 0)
return; /* connection closed by other end */

result.sum = args.arg1 + args.arg2;
Writen(sockfd, &result, sizeof(result));
}
}


--------------------------------------------------------------------------------

TCP回射客户端程序
//main创建套接口,装填IP地址结构socket bzero与服务器连接connect

#include "unp.h"

int
main(int argc, char **argv)
{
int sockfd;
struct sockaddr_in servaddr;

if (argc != 2)
err_quit("usage: tcpcli ");

sockfd = Socket(AF_INET, SOCK_STREAM, 0);

bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(SERV_PORT);
Inet_pton(AF_INET, argv[1], &servaddr.sin_addr);

Connect(sockfd, (SA *) &servaddr, sizeof(servaddr));

str_cli(stdin, sockfd); /* do it all */

exit(0);
}


//tcp回射客户程序str_cli函数

#include "unp.h"

void
str_echo(int sockfd)
{
long arg1, arg2;
ssize_t n;
char line[MAXLINE];

for ( ; ; ) {
if ( (n = Readline(sockfd, line, MAXLINE)) == 0)
//从服务器读回射行

return; /* connection closed by other end */

if (sscanf(line, "%ld%ld", &arg1, &arg2) == 2)
snprintf(line, sizeof(line), "%ldn", arg1 + arg2);
else
snprintf(line, sizeof(line), "input errorn");

n = strlen(line);
Writen(sockfd, line, n);//写到服务器
}
}


--------------------------------------------------------------------------------

正常启动

服务器后台启动 ./tcpserv01 &

检查监听套接口状态 netstat –a

过滤:netstat –a |grep 9877

启动客户端程序 ./tcpcli01 127.0.0.1

检查TCP的连接 netstat –a

过滤:netstat –a |grep 9877

 

    
 
 

您可能感兴趣的文章:

  • andriod下java socket网络编程:java socket客户端服务端代码示例
  • re socket编程中 ACCEPT返回的socket与原socket(他参数中的)端口号一样吗?
  • IOS开发之socket网络编程(基于SimpleNetworkStreams的c/s程序)
  • 大家帮忙推荐一本linux socket编程的入门书,我刚接触socket,谢谢!!
  • Linux c socket编程:简单的客户端(client)和服务端(server)实现
  • socket 编程时,write的写入的数据大于socket缓冲区,会有什么结果??
  • Linux下使用openssl api编程socket编程,为什么要编译啊?
  • 关于文件操作和Socket网络编程!
  • linux下socket编程问题!
  • socket编程 中的bind问题
  • socket编程--htons
  • 急!!请教关于linux socket编程的一个问题!!
  • 急!关于SOCKET编程,在线等待!
  • socket编程 通过man socket, 没有找到socket函数的第一参数该填什么 怎样利用man手册
  • 多进程socket编程问题
  • 问一个socket编程问题,急~~~
  • 求教!为何在socket编程中调recv函数无法阻塞?
  • 请教一个socket编程问题
  • 求助!!linux下socket编程
  • socket编程,使用recvfrom()函数监听问题。
  • sco unix下socket编程的问题,请大家帮忙
  • php实现socket实现客户端和服务端数据通信源代码
  • 请问unix与window之间能否实现socket通信或者有什么方式可以通信?
  • SSL握手通信详解及linux下c/c++ SSL Socket代码举例
  • 两个 Socket 互相通信,其中一个如何判断另一个 Socket 是否已经意外断开了连接?
  • linux下用socket实现多进程间通信问题?
  • 怎样提高j2me中socket通信速度???
  • FIFO和Socket通信的并发效率问题
  • socket 通信!
  • 关于多网口socket通信的简单问题
  • socket通信
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux socket问题。。怎样获得已帮定特定port的一个套接字socket
  • 你是否可以回答Socket的问题?数据先后问题
  • 关于socket概念的理解问题!
  • Socket的问题
  • socket accept问题,大家指教。
  • socket客户端程序的问题
  • fgets用在SOCKET流上的问题
  • linux socket fd 写阻塞问题
  • 请教:多线程使用同一个socket进行数据收发会出现什么问题?
  • 请问socket方面的问题
  • 请教两个小问题:一个cgywin下使用vi的问题,另一个socket的问题
  • windows 与 linux socket 编程问题
  • Socket的问题?
  • 关于socket通讯的一个问题
  • socket read返回问题
  • linux和unix iis7站长之家
  • 问个linux下raw socket的问题
  • C++ socket挂钩问题
  • 关于socket编程中阻塞的问题
  • Linux下socket编程的问题?
  • java命名空间java.net类socket的类成员方法: socket定义及介绍
  • libevent2需要从socket读一段数据写入一个socket中,同时发送给另一个socket
  • java命名空间java.nio.channels类socketchannel的类成员方法: socket定义及介绍
  • vc做的的socket应用和unix下socket?
  • java命名空间java.nio.channels类serversocketchannel的类成员方法: socket定义及介绍
  • QSocketDevice ( int socket, Type type )中那个 int socket 是哪里来得?
  • java命名空间java.nio.channels类datagramchannel的类成员方法: socket定义及介绍
  • 线程间可否通过管道传递SOCKET句柄?还有其他方式传递SOCKET么?
  • java命名空间java.net类socket的类成员方法: getsendbuffersize定义及介绍
  • [FreeBSD] 大神,求解,control socket : can‘t to any socket
  • java命名空间java.net类socket的类成员方法: getreceivebuffersize定义及介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3