当前位置:文档之家› linux网络编程socket

linux网络编程socket

linux网络编程socket
linux网络编程socket

网络编程的流程:

客户端:

1、创建一个socket;

2、绑定socket(IP,端口号);

因为在connect()中已经绑定了,所以不需要用blind()函数来绑定。

serv_addr.sin_family=AF_INET;

serv_addr.sin_port=htons(MYPORT); //端口号也就是进程,相当于应用程序的编号。端口号要与服务端的一致,所以绑定的端口号是服务端的端口号

serv_addr.sin_addr.s_addr=inet_addr(IP); //绑定的IP是本机的IP

3、发送建立连接请求connect();

4、收到连接响应;

5、发送数据send();

6、关闭socket, close(sock_fd)。

服务端端:

1、创建一个socket;

2、绑定socket(IP,端口号),blind();

my_addr.sin_family = AF_INET;

my_addr.sin_port = htons(MYPORT); //绑定的端口号是自己的端口号

my_addr.sin_addr.s_addr = INADDR_ANY; // IP是客户端任意一个IP

3、侦听来自客户端的连接请求,listen();

4、有客户端连接请求,为建立请求的客户端创建一个socket,返回连接响应,

accept();

5、接受客户端发送的数据,recv();

6、关闭,close(new_fd)。

#include

#include

#include

#include

#include

#include

#include

#include

#define MYPORT 3999 //listening port

#define BACKLOG 10 //max connect requests

#define MAXDATASIZE 100 /*max data volume */

#define IP "127.0.0.1"

main(int argc,char *argv[])

{

int sock_fd,numbytes;

// char *buf;

// buf=(char *)malloc(20);

char buf[20];

struct hostent *host;

struct sockaddr_in serv_addr;

/*socket*/

if((sock_fd=socket(AF_INET,SOCK_STREAM,0))==-1)

{

perror("socket creat error");

exit(1);

}

serv_addr.sin_family=AF_INET;

serv_addr.sin_port=htons(MYPORT);

// serv_addr.sin_addr=inet_addr(IP);

serv_addr.sin_addr.s_addr=inet_addr(IP);

bzero(&(serv_addr.sin_zero),8);

/*connect*/

if(connect(sock_fd,(struct sockaddr *)&serv_addr,sizeof(struct sockaddr))==-1) {

perror("connect error");

exit(1);

}

printf("Please enter the string:\n");

gets(buf);

/*send*/

if((numbytes=send(sock_fd,buf,strlen(buf),0))==-1)

{

perror("send error");

exit(1);

}

printf("send:%d\n",numbytes);

close(sock_fd);

exit(0);

}

#include

#include

#include

#include

#include

#include

#include

#include

#define MYPORT 3999 //listening port

#define BACKLOG 10 //max connect requests

#define MAXDATASIZE 100 /*max data volume */

main()

{

int sock_fd, new_fd, numbytes; /*sock_fd:listening socket;new_fd:data socket */

struct sockaddr_in my_addr; /*server address */

struct sockaddr_in their_addr; /*client address */

int sin_size;

char buf[MAXDATASIZE];

/*创建socket*/

if ((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {

perror("socket create error");

exit(1);

}

my_addr.sin_family = AF_INET;

my_addr.sin_port = htons(MYPORT);

my_addr.sin_addr.s_addr = INADDR_ANY;

bzero(&(my_addr.sin_zero), 8);

if (bind

(sock_fd, (struct sockaddr *) &my_addr,

sizeof(struct sockaddr)) == -1) {

perror("bind error");

exit(1);

}

printf("bind success\n");

if (listen(sock_fd, BACKLOG) == -1) {

perror("listen error");

exit(1);

}

/*accept*/

while (1) {

sin_size = sizeof(struct sockaddr_in);

if ((new_fd =

accept(sock_fd, (struct sockaddr *) &their_addr,

&sin_size)) == -1) {

perror("accept error");

continue;

}

printf("received a connect from:%s\n",

inet_ntoa(their_addr.sin_addr));

if ((numbytes = recv(new_fd, buf, MAXDATASIZE, 0)) == -1) { perror("recv error");

exit(1);

}

buf[numbytes] = '\0';

printf("Received:%s\n", buf);

close(new_fd);

}

}

相关主题
文本预览
相关文档 最新文档