您的位置:首页 > 理论基础 > 计算机网络

Linux下TCP/IP网络编程——结课考试知识总结

2016-06-01 15:21 483 查看
socket也被认为是文件的一种,因此在网络数据传输过程中自然也可以使用文件I/O的相关函数。

协议就是为了完成数据交换而做的约定。

PF_INET—-IPv4互联网协议

下列数据适合用那类套接字传输

a.演唱会现场直播的多媒体数据(SCOK_DGRAM)

b.某人压缩过的文本文件(SCOK_STREAM)

c.网上银行用户与银行之间的数据传递(SCOK_STREAM)

端口号就是在同一操作系统内为区分不同的套接字而设置的,由16位构成,可分配的端口号是0~65535,但1~1023时知名端口,一般分配给特定的应用程序。

TCP套接字和UDP套接字不会共用端口号,允许重复,但相同的套接字不允许端口重复。

数据传输目标地址同时包含IP地址和端口号。

客户端调用connect函数后,发生以下情况之一才会返回(完成函数的调用)

服务器端接受连接请求

发生断网等异常情况而中断连接请求

TCP





ceho_client.c

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<arpa/inet.h>
#define BUF_SIZE 1024
void error_handling(char *message);
int main(int argc,char *argv[])
{
int sock;
char message[BUF_SIZE];
int str_len;
struct sockaddr_in serv_adr;
if(argc!=3)
{
printf("Usage: %s <IP><PORT>\n",argv[0]);
exit(1);
}
sock = socket(PF_INET,SOCK_STREAM,0);
if(sock==-1)
error_handling("socket() error");
memset(&serv_adr,0,sizeof(serv_adr));
serv_adr.sin_family = AF_INET;
serv_adr.sin_addr.s_addr = inet_addr(argv[1]);
serv_adr.sin_port = htons(argv[2]);

if(connect(sock),(struct sockaddr*)&serv_adr,sizeof(serv_adr)) == -1)
error_handling("connect() error!");
else
puts("Connected......");
while(1)
{
fputs("Input message(Q to quit):",stdout);
fgets(message,BUF_SIZE,stdin);

if(!strcmp(message,"q\n") || !strcmp(message,"Q\n"))
berak;

write(sock,message,strlen(message));
str_len = read(sock,message,BUF_SIZE-1);
message{str_len} = 0;
printf("Message from server: %s",message);
}
close(sock);
return 0;
}

void error_handling(char *message)
{
fputs(message,stderr);
fputc('\n',stderr);
exit(1);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息